为何`null + 1 = 1`而`undefined + 1 = NaN`?二者结果为何不同?
为什么
null + 1是1,而undefined + 1是NaN? 嘿,这个问题问得特别好!刚开始啃JavaScript隐式类型转换的时候,真的很容易被这俩相似的“空值”搞晕😅。其实核心原因在于JS对null和undefined的数字类型转换规则完全不同,咱们一步步拆解:
- 首先,JS里的加法运算(
+)会先把两个操作数转换成原始值(ToPrimitive),如果转换后不是字符串,就会进一步转换成数字再计算。 - 对于
null:当它被转换为数字时,规则明确规定会变成0。你可以直接在控制台验证:Number(null)的结果就是0,所以null + 1等价于0 + 1,自然得到1。 - 对于
undefined:它的数字转换规则是返回NaN(Not a Number)。同样验证一下:Number(undefined)会输出NaN。而NaN和任何值做运算结果都是NaN,所以undefined + 1就得到NaN了。
说个额外的小背景:null代表的是“一个存在但为空的值”,比如你声明了一个变量用来存数字,但暂时没内容,用null表示空的数字位置,转成0符合逻辑;而undefined是“压根没定义的值”,连存在的位置都没有,所以转成NaN来表示“无效数字”更合理。
内容的提问来源于stack exchange,提问作者Mohit Bhardwaj
相关产品推荐
相关产品推荐

