我最近遇到过这个问题,“+ string”将字符串转换为数字(具体来说,使用字符串前面的加号运算符或类型强制的字符串变量),但无法找到文档或讨论满意我的兴趣。我得到的印象是它很懒或可能会产生意想不到的副作用,但我想更好地理解它。任何见解都表示赞赏。
答案 0 :(得分:2)
正如ECMAScript spec中描述的section 12.5.6:
12.5.6一元+操作员
注意 一元+运算符将其操作数转换为数字类型。
因此,在JavaScript中,一元+
运算符(例如+x
)将始终将表达式x
转换为数字。换句话说,以下陈述是等效的:
var x = Number('1234');
var y = +'1234';
这也适用于任何变量,不仅仅是字符串或数字。如果您尝试转换的对象不是字符串或数字,则将调用该对象的toString()
方法将对象转换为字符串,然后将其转换为数字。例如:
var obj = {
toString: function() { return '9999'; }
};
var num = +obj; // = 9999
答案 1 :(得分:1)
一元加号运算符与一元减号相同。您可能熟悉这种语法:
const a = 1;
console.log(-a); // -> -1
将a
的值类型化为Number,然后将操作应用于结果值。这就是为什么如果您尝试将一元运算符应用于字符串,最终会得到NaN
,例如
const a = 'abc';
console.log(-a); // -> NaN
虽然字符串"123"
将成功输入数字123
,但您会看到-123
:
const a = '123';
console.log(-a); // -> -123
+
的工作方式相同,但不会否定价值。所以,如果你这样做
+123
该值将保持123
。如果你这样做
+'abc'
值为NaN
,就像-'abc'
一样。但如果你这样做
+'123'
然后"123"
(字符串)将被类型转换为123
(数字),应用+
(数字没有任何反应),并返回。因此,您最终会得到123
(数字)。