Javascript null是否被视为零且未定义,而不是算术表达式上的数字?

Javascript null是否被视为零且未定义,而不是算术表达式上的数字?,javascript,null,undefined,nan,zero,Javascript,Null,Undefined,Nan,Zero,算术表达式上的null是否计算为0和undefined是否计算为NaN 根据一些测试,似乎是这样的: > null + null 0 > 4 + null 4 > undefined + undefined NaN > 4 + undefined NaN 这是安全的还是正确的假设?(文档中的引用应为a+。无需进行类型绑定 null == false == 0 null !== false !== 0 也就是说,null==0,null+4=4 我希望这会有所

算术表达式上的
null
是否计算为
0
undefined
是否计算为
NaN

根据一些测试,似乎是这样的:

> null + null
0

> 4 + null
4

> undefined + undefined
NaN

> 4 + undefined
NaN

这是安全的还是正确的假设?(文档中的引用应为a+。

无需进行类型绑定

null == false == 0

null !== false !== 0

也就是说,
null==0
null+4=4


我希望这会有所帮助。

这样假设似乎是安全的,因为在算术表达式(例如)中,该方法将被调用,分别从
未定义的
计算
NaN
+0

到数字转换
╔═══════════════╦════════════════════════════════════════════╗
║ 参数类型║                   结果║
╠═══════════════╬════════════════════════════════════════════╣
║ 未定义║ 楠║
║               ║                                            ║
║ 无效的║ +0║
║               ║                                            ║
║ 布尔值║ 如果参数为true,则结果为1。║
║               ║ 如果参数为false,则结果为+0。║
║               ║                                            ║
║ 数║ 结果等于输入参数(否║
║               ║ 转换)。║
║               ║                                            ║
║ 一串║ 参见下面的语法和注释。║
║               ║                                            ║
║ 对象║ 应用以下步骤:║
║               ║   1.将PrimitValue设为TopPrimitive(输入║
║               ║      参数,提示号)。║
║               ║   2.返回tonNumber(primValue)。║
╚═══════════════╩════════════════════════════════════════════╝

算术表达式上的null值是否为0,而未定义为NaN?这是安全的还是正确的假设

是的。“算术表达式”将使用:

它用于以下“算术”表达式中:

  • /增减
  • 一元数与算子
  • 如果两个参数都不是字符串,则
  • ,手术
  • 运算符,如果不是,则两个参数都是字符串

运算符不使用它,因此
null==0
为false(并且
null!==0
无论如何)

@dystroy,是的,但那将是一个字符串连接,而不是一个算术表达式。它就像一个有10把手电筒的杂耍演员一样安全。如果他确切知道自己在做什么,那么它是安全的。@talles它完全是同一个运算符-
+
@Pointy,仅仅因为它是同一个字符,并不意味着它是同一个运算符
string+
是字符串连接,而
int+
是整数加法。我认为可以公平地说:标准操作请不要依赖null。你可以在JS中使用它,但这是一种非常糟糕的做法。我完全同意,这是严格意义上的非类型限制语言陷阱或优势,取决于你如何看待它。是的,这可能取决于你从哪里开始。如果您是从一种更结构化的语言开始使用JS,那么以这种方式使用JS是非常可怕的。如果你从JS开始,你会接触到一种结构化的语言,并且想知道为什么你不能做所有有用的事情!当非严格相等的
false==0
时,
false
0
都不等于
null
。您是否尝试过此操作?链接似乎已断开。但是请注意,如果
+
的另一个操作数是字符串,则调用
ToString
,并执行字符串串联。所以
null+“hello”
是字符串
“nullhello”
 Argument Type | Result
 --------------+--------
 Undefined     | NaN
 Null          | +0
 …             |