我的声明如
var x = parseInt(1)+'b';
为什么这个结果是1b但isNAN('b')
返回true;
结果应该是NaN?
答案 0 :(得分:12)
Number + String
不是算术运算。
在Number + String
语句中,引擎会将数字转换为字符串等效值。
在您的情况下,它将是1 -> '1'
。然后将是简单的字符串连接,因为+
运算符将连接两个字符串。
'1' + 'b' === '1b';
代码段
console.log(1 + 'b');

如果是IsNaN('b')
,它会尝试检测参数是否为数字。 'b'
不是数字(NaN
),因此会返回true
。
代码段
console.log(isNaN('b'));

有关详情,请参阅 Documentation
答案 1 :(得分:5)
因为它不是算术运算,所以它是一个字符串连接。只要 操作数到+
是一个字符串,就会完成字符串连接而不是添加; details in the spec。如果另一个操作数不是一个字符串,那么它就是字符串。所以你最终得到了"1" + "b"
=> "1b"
。
答案 2 :(得分:4)
如果任一操作数是字符串,则+
运算符被定义为连接。
来源:https://www.ecma-international.org/ecma-262/5.1/#sec-11.6.1
答案 3 :(得分:1)
+
运算符,当它有一个字符串作为其参数之一时,将被解释为" concatenation"运算符而不是"加法"。非字符串值将转换为字符串并附加到或附加到字符串值,具体取决于它是否分别位于运算符的右侧或左侧。