任何使用NaN的算术运算都应该是NaN

时间:2017-01-10 17:15:53

标签: javascript nan

我的声明如

var x = parseInt(1)+'b';

为什么这个结果是1b但isNAN('b')返回true;  结果应该是NaN?

4 个答案:

答案 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"运算符而不是"加法"。非字符串值将转换为字符串并附加到或附加到字符串值,具体取决于它是否分别位于运算符的右侧或左侧。