为什么undefined、NaN和Infinity可以被赋值,而null不可以?
如下代码:
undefined = 123;
NaN = 123;
Infinity = 123;
null = 123; // 报错:Uncaught Reference Error
undefined
/NaN
/Infinity
是全局属性,这些属性是不可写(writable:false
)的,也就是说在全局作用域内不能重新赋值(赋值无效,不会报错);
null
是一个JavaScript字面量(而不是全局对象的一个属性),不能对其赋值。
因为null
是 javascript 的关键字,而undefined
虽然含义和null很像,但是他是js预定义的一个全局变量,他的值就是'undefined'。
其实早在ES3中,有一个bug
,undefined
是一个可读可写的变量,可以给他赋任意值,但到了ES5就被修复了,他是一个只读的值,所以虽然没有报错,但是赋值语句是没有效果的。
在《javascript权威指南》(第六版)中对于null的描述就是:null is a language keyword that evaluates to a special value that is usually used to
indicate the absence of a value.
其实在这里指的关键字和保留字是一个意思,没必要斤斤计较。
版权所属:SO JSON在线解析
原文地址:https://www.sojson.com/blog/45.html
转载时必须以链接形式注明原始出处及本声明。
如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。