null + 1 = 1
undefined + 1 = NaN
我无法理解这背后的逻辑是什么。难道两者都不会返回相同的结果吗?
答案 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