Добавление + "в строку добавляет" 0"
Случайной опечаткой я столкнулся с поведением, которое я не могу объяснить.
Когда у меня есть
var text = "abc";
text += + "";
переменная text
внезапно становится abc0
.
Может ли кто-нибудь объяснить это, пожалуйста?
Ответы
Ответ 1
+ ""
оценивает число 0
. Это связано с тем, что для применения унарного плюса оператор ""
принуждается к числу - то же, что и Number("")
, что приводит к 0
, если строка пустая или пустая.
Когда вы затем "добавляете" (+
или в этом случае +=
) число 0
в строку "abc"
, оно принуждается к строке "0"
, что приводит к "abc0"
.
Из spec:
StringNumericLiteral, пустой или содержащий только пробел, преобразуется в +0.
Ответ 2
Как вы можете видеть в TypeScript (+ "")
есть число (0):
![введите описание изображения здесь]()
Ответ 3
from: http://xkr.us/articles/javascript/unary-add/
В JavaScript можно использовать только оператор + перед одним элементом. Это указывает на математическую операцию и пытается преобразовать элемент в число. Если преобразование не удастся, оно будет оцениваться до NaN. Это особенно полезно, когда нужно быстро преобразовать строку в число, но также можно использовать для набора других типов.