84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
如下代码:
undefined = 123; NaN = 123; Infinity = 123; null = 123; // 报错:Uncaught Reference Error
前三条语句可以执行,尽管赋值并没有成功;最后一条语句报错。
为什么?它们有什么区别?
认证0级讲师
undefined/NaN/Infinity是全局属性,这些属性是不可写(writable:false)的,也就是说在全局作用域内不能重新赋值(赋值无效,不会报错);MDN-undefinednull是一个JavaScript字面量(而不是全局对象的一个属性),不能对其赋值。MDN-null
undefined
NaN
Infinity
writable:false
null
因为null是js的关键字,而undefined虽然含义和null很像,但是他是js预定义的一个全局变量,他的值就是'undefined'。其实早在ES3中,有一个bug,undefined是一个可读可写的变量,可以给他赋任意值,但到了ES5就被修复了,他是一个只读的值,所以虽然没有报错,但是赋值语句是没有效果的。
自问自答了,不过采纳了jasonintju的回答,因为他是最先回答出来。
undefined、NaN和Infinity是全局对象window的属性。所以可以被赋值,但是由于它们的内部属性[[writable]]为false,所以赋值实际上无效。证明:
window
[[writable]]
false
Object.getOwnPropertyDescriptor(window, 'undefined'); // 结果: // Object {value: undefined, writable: false, enumerable: false, configurable: false}
可见,undefined确实是window的属性,并且不可写。
null与true、false类似,是字面量,属于JavaScript的保留字。换句话说,跟123、'foobar'是一类的,当然不能赋值。
true
123
'foobar'
参考:1. ECMA-262 Edition 5.1: 15.1 The Global Object2. ECMA-262 Edition 5.1: 7.6.1 Reserved Words
规定null在左边导致语法错误Invalid left-hand side in assignment。理解它并没有什么特殊的意义。规定0是自然数,那为什么0是自然数呢?
这里没有因果关系,只有存在本身。
undefined
/NaN
/Infinity
是全局属性,这些属性是不可写(writable:false
)的,也就是说在全局作用域内不能重新赋值(赋值无效,不会报错);MDN-undefined
null
是一个JavaScript字面量(而不是全局对象的一个属性),不能对其赋值。MDN-null
因为null是js的关键字,而undefined虽然含义和null很像,但是他是js预定义的一个全局变量,他的值就是'undefined'。
其实早在ES3中,有一个bug,undefined是一个可读可写的变量,可以给他赋任意值,但到了ES5就被修复了,他是一个只读的值,所以虽然没有报错,但是赋值语句是没有效果的。
自问自答了,不过采纳了jasonintju的回答,因为他是最先回答出来。
undefined
、NaN
和Infinity
是全局对象window
的属性。所以可以被赋值,但是由于它们的内部属性[[writable]]
为false
,所以赋值实际上无效。证明:可见,undefined确实是window的属性,并且不可写。
null
与true
、false
类似,是字面量,属于JavaScript的保留字。换句话说,跟123
、'foobar'
是一类的,当然不能赋值。参考:
1. ECMA-262 Edition 5.1: 15.1 The Global Object
2. ECMA-262 Edition 5.1: 7.6.1 Reserved Words
规定null在左边导致语法错误Invalid left-hand side in assignment。理解它并没有什么特殊的意义。
规定0是自然数,那为什么0是自然数呢?
这里没有因果关系,只有存在本身。