首页 > 为什么undefined、NaN和Infinity可以被赋值,而null不可以?

为什么undefined、NaN和Infinity可以被赋值,而null不可以?

如下代码:

undefined = 123;
NaN = 123;
Infinity = 123;
null = 123; // 报错:Uncaught Reference Error

前三条语句可以执行,尽管赋值并没有成功;最后一条语句报错。

为什么?它们有什么区别?


undefined/NaN/Infinity是全局属性,这些属性是不可写(writable:false)的,也就是说在全局作用域内不能重新赋值(赋值无效,不会报错);
MDN-undefined
null是一个JavaScript字面量(而不是全局对象的一个属性),不能对其赋值。
MDN-null


规定null在左边导致语法错误Invalid left-hand side in assignment。理解它并没有什么特殊的意义。
规定0是自然数,那为什么0是自然数呢?

这里没有因果关系,只有存在本身。


自问自答了,不过采纳了jasonintju的回答,因为他是最先回答出来。

参考:
1. ECMA-262 Edition 5.1: 15.1 The Global Object
2. ECMA-262 Edition 5.1: 7.6.1 Reserved Words


因为null是js的关键字,而undefined虽然含义和null很像,但是他是js预定义的一个全局变量,他的值就是'undefined'。
其实早在ES3中,有一个bug,undefined是一个可读可写的变量,可以给他赋任意值,但到了ES5就被修复了,他是一个只读的值,所以虽然没有报错,但是赋值语句是没有效果的。

【热门文章】
【热门文章】