Я нашел три способа приведения переменной String
в JavaScript.
Я искал эти три опции в исходном коде jQuery, и все они используются .
Я хотел бы знать, есть ли различия между ними:
value.toString()
String(value)
value + ""
Все они производят один и тот же результат, но один из них лучше других?
Я бы сказал, что у + ""
него есть преимущество в том, что он сохраняет некоторых персонажей, но это не такое большое преимущество, что-нибудь еще?
javascript
jquery
string
Гдорон поддерживает Монику
источник
источник
toString()
будет путь.toString
, семантически это самый простой способ документировать сам факт того, что вы пытаетесь получить строковый эквивалент объекта.String(...)
немного тупой, иvalue + ""
немного взломать. Это также дает вам возможность переопределить настройки по умолчаниюtoString
с пользовательской реализацией, если вы когда-либо нуждались, я полагаю, в качестве незначительной дополнительной выгоды.+ ""
он самый быстрый в соответствии с jsperf, так что ... он делает это иначе, я думаю.Ответы:
Они ведут себя по-разному, когда
value
естьnull
.null.toString()
выдает ошибку - Невозможно вызвать метод 'toString' с нулевым значениемString(null)
возвращает - «ноль»null + ""
также возвращает - «ноль»Очень похожее поведение происходит, если
value
естьundefined
(см . Ответ JBabey ).Кроме этого, есть незначительная разница в производительности, о которой, если вы не используете их в больших циклах, не стоит беспокоиться.
источник
toString()
когда вы еще не проверилиnull
.null
илиundefined
вывод на экран более желательным поведением, чем ошибка javascript ...v + ''
возвращает неверный результат, если v имеет методы toString () и valueOf (). Конкатенация будет игнорировать toString () и будет использовать valueOf (). Пример класса, для которого конкатенация не удалась: github.com/processing-js/processing-js/blob/…Есть различия, но они, вероятно, не имеют отношения к вашему вопросу. Например, прототип toString не существует для неопределенных переменных, но вы можете привести undefined к строке, используя два других метода:
http://jsfiddle.net/f8YwA/
источник
String()
. Пример:String(test);
throwsUncaught ReferenceError: test is not defined
, в то время какvar test; String(test);
приведет к"undefined"
.Они ведут себя одинаково, но
toString
также предоставляют способ преобразования двоичных, восьмеричных или шестнадцатеричных строк:Пример:
источник
Согласно этому тесту JSPerf , они отличаются по скорости. Но если вы не собираетесь использовать их в огромных количествах, любой из них должен работать хорошо.
Для полноты: как уже упоминалось asawyer , вы также можете использовать
.toString()
метод.источник
new String()
возвращает объект, который неString
new String()
возвращает объект да.String()
Однако возвращает строку, которая является в вопросе.new String(blarg)
дает вамString
объект, который вы можете вызватьtoString()
. В моем отладчике Chrome они фактически приводят к тому же виду объектов, за исключением упомянутой разницы.В дополнение ко всему вышесказанному следует отметить, что для определенного значения
v
:String(v)
звонкиv.toString()
'' + v
вызовыv.valueOf()
до любого другого типа приведенияТаким образом, мы могли бы сделать что-то вроде:
Протестировано в FF 34.0 и Node 0.10
источник
если вы согласны с null, undefined, NaN, 0 и false, все приведение к '' тогда
(s ? s+'' : '')
будет быстрее.см. http://jsperf.com/cast-to-string/8
обратите внимание - в настоящее время существуют значительные различия между браузерами.
источник
Реальный пример: У меня есть функция журнала , которая может быть вызвана с произвольным числом параметров:
log("foo is {} and bar is {}", param1, param2)
. Если установленDEBUG
флагtrue
, скобки заменяются данными параметрами, и строка передаетсяconsole.log(msg)
. Параметрами могут быть и будут строки, числа и все, что может быть возвращено вызовами JSON / AJAX, может быть дажеnull
.arguments[i].toString()
это не вариант из-за возможныхnull
значений (см. ответ Коннелла Уоткинса)arguments[i] + ""
. Это может или не может повлиять на решение о том, что использовать. Некоторые люди строго придерживаются JSLint.источник
На этой странице вы можете самостоятельно проверить производительность каждого метода :)
http://jsperf.com/cast-to-string/2
здесь, на всех машинах и браузерах, ' "" + str ' самый быстрый, (String) самый медленный
источник