摘要:既然是属性,当然可以赋值。然而这三个属性又是不可写的属性,即它们的的内部特性为,所以赋值无效。因为严格模式下,禁止给对象的只读属性赋值。虽然号称是这种原始类型可以取的唯一值,然而输出参考文档
提出问题
如下代码:
undefined = 123; null = 123; // 报错:Uncaught Reference Error
第一条语句可以执行,尽管赋值并没有成功;第二条语句报错。这是为什么呢?undefined和null有什么区别?
解决问题读过ES规范后,发现原来是这样的:
undefined、NaN和Infinity都是全局对象window的属性。既然是属性,当然可以赋值。然而这三个属性又是不可写的属性,即它们的的内部特性[[writable]]为false,所以赋值无效。
null是一个字面量(literal),准确地说叫做Null字面量。与true和false类似。它们都属于JavaScript的保留字。换句话说它们都是值,与数字值123、字符串值"foobar"一样,当然不能被赋值了。
再多说些
既然undefined只是一个属性,并不是语言的保留字,那么它是否可以用来作为变量的名字?当然可以,你完全可以自定义一个叫做undefined的变量或者函数,但是注意不要把它放到全局作用域。例如:
function foo() { var undefined = 10; console.log(undefined); } foo(); // 打印10
通过ES5新增的方法Object.getOwnPropertyDescriptor方法,可以证明undefined是window对象的只读属性:
Object.getOwnPropertyDescriptor(window, "undefined"); /** 输出:Object {value: undefined, writable: false, enumerable: false, configurable: false} **/
在严格模式下,给undefined赋值会报错。因为严格模式下,禁止给对象的只读属性赋值。
null虽然号称是Null这种原始类型可以取的唯一值,然而:
typeof null; // 输出"object"参考文档
15.1.1.3 undefined
7.6.1 Reserved Words
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/91587.html
摘要:有这样一个热门问题其实这个问题很好理解,关键要弄清下面两个知识点引擎对赋值表达式的处理过程赋值运算的右结合性一赋值表达式形如的表达式称为赋值表达式。赋值表达式是右结合的。 有这样一个热门问题: var a = {n: 1}; var b = a; a.x = a = {n: 2}; alert(a.x); // --> undefined alert(b.x); // --> {n: ...
摘要:的码点被称为基本字符区域。关于的介绍,我准备用文档阮一峰来做一些介绍,具体的可以参考文档引入的原因的对象属性名都是字符串,这容易造成属性名的冲突。其他的一些属性可以去看文档阮一峰注意函数前不能使用命令,否则会报错。 笔记说明 重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系,笔者主要整理学习过程的一些要点笔记以及感悟,完...
摘要:的码点被称为基本字符区域。关于的介绍,我准备用文档阮一峰来做一些介绍,具体的可以参考文档引入的原因的对象属性名都是字符串,这容易造成属性名的冲突。其他的一些属性可以去看文档阮一峰注意函数前不能使用命令,否则会报错。 笔记说明 重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系,笔者主要整理学习过程的一些要点笔记以及感悟,完...
摘要:的码点被称为基本字符区域。关于的介绍,我准备用文档阮一峰来做一些介绍,具体的可以参考文档引入的原因的对象属性名都是字符串,这容易造成属性名的冲突。其他的一些属性可以去看文档阮一峰注意函数前不能使用命令,否则会报错。 笔记说明 重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系,笔者主要整理学习过程的一些要点笔记以及感悟,完...
阅读 1573·2021-11-24 09:39
阅读 3021·2021-11-22 15:24
阅读 3065·2021-10-26 09:51
阅读 3252·2021-10-19 11:46
阅读 2868·2019-08-30 15:44
阅读 2189·2019-08-29 15:30
阅读 2519·2019-08-29 15:05
阅读 751·2019-08-29 10:55