为什么`null + 1 = 1`但是'undefined + 1 = NaN`?

时间:2018-03-29 07:46:27

标签: javascript undefined nan

null + 1 = 1

undefined + 1 = NaN

我无法理解这背后的逻辑是什么。难道两者都不会返回相同的结果吗?

3 个答案:

答案 0 :(得分:5)

基本上,因为那是语言规范所说的 - 看ToNumber

Type        Result
Null        +0
Undefined   NaN

NaN +任何内容都是NaN

这个可能从语言角度来看是有意义的:null表示显式空值,而undefined表示未知值。在某种程度上 - 零是"数字空值"因为它是中性的添加。这就是说 - 这相当长,我认为这通常是糟糕的设计。在真正的JavaScript代码中 - 您几乎从不向事物添加null

答案 1 :(得分:2)

由于undefined表示其值尚未定义,因此需要NaN并向您添加1 NaN + 1,这导致该值仍未定义{{1} }

另一方面NaN - 对象有null + 1值,你试图加1,这样它就会返回1分配给对象

你也可以参考这个基本的区别 - What is the difference between null and undefined in JavaScript?

答案 2 :(得分:1)

  

undefined表示尚未声明变量或已声明变量   但尚未分配值,null是赋值   这意味着“没有价值”   http://www.jstips.co/en/javascript/differences-between-undefined-and-null/

铸造变量类型的js的自然性在null + 1中应用(因为null是typeof对象),同时它不能应用于“无值”(未定义)。

  

当JavaScript尝试对“错误的”数据类型进行操作时,它会尝试   将值转换为“正确”类型。   https://www.w3schools.com/js/js_type_conversion.asp

更多细节: https://codeburst.io/javascript-null-vs-undefined-20f955215a2