JavaScript null和加号(+)运算符

时间:2014-09-12 01:31:02

标签: arrays null javascript

我想了解JavaScript的核心。我知道它没有太大的实施价值。如果你不想回答,那就离开吧。但是,如果您在应用加法(+)时能够帮助理解以下类型强制,我将不胜感激。

1. 
null + null // 0
2.
null + undefined; // NaN
3.
null + NaN; // NaN
4. 
1 + null; //1
5. 
true + null; //1
6. 
true + [null]; //"true"

我知道null是一个空的或丢失的对象。如果你能解释类型强制或一元(+)操作的步骤,我将不胜感激。感谢您阅读此问题。

2 个答案:

答案 0 :(得分:14)

11.6.1 The Addition operator ( + )中对此进行了介绍 - 请随时阅读并遵守规则。

前五个案例可以通过查看ToNumber来解释:

Value       ToNumber(Value)
---------   ---------------
null        0
undefined   NaN
NaN         NaN
1           1
true        1

0 + 0 == 0(和1 + 0 == 1),而x + NaN or NaN + x evaluates to NaN。由于上面的每个值也都是一个原语,ToPrimitive(x)求值为x(其中x不是一个字符串),并且没有调用“字符串连接子句”。

最后一种情况的不同之处在于它来自数组上的ToPrimitive(最终调用Array.prototype.toString),从而产生字符串值。因此,最终会应用ToString,而不是ToNumber,并按照以下方式进行操作:

   true + [null]
=> true + ""          // after ToPrimitive([null]) => ""
=> "true" + ""        // after ToString(true) => "true"
=> "true"             // via String Concatenation

答案 1 :(得分:1)

从分析结果得出的结论

true强制为1(和false为0)。

null强迫0。

undefined强迫NaN。

数组的行为如下:

  • 在一元+(+[])下:
    • 长度为1的第一个元素
    • 0如果它们是空的
    • NaN,如果有超过1个元素
  • 在二进制+(1+[])下:
    • 将两个运算符强制转换为字符串并加入它们

NaN上的所有操作都返回NaN