JavaScript学习笔记
因为一段代码,而学习到“属性描述符”这个概念
var x = y = {n: 2};
delete x; // false
delete y; // true
y.n = 100;
y.n === x.n; // true
Object.getOwnPropertyDescriptor() 方法返回指定对象上一个自有属性对应的属性描述符。
一个属性描述符是一个记录,由下面属性当中的某些组成的:
value该属性的值(仅针对数据属性描述符有效)writable当且仅当属性的值可以被改变时为true。(仅针对数据属性描述有效)get获取该属性的访问器函数(getter)。如果没有访问器, 该值为undefined。(仅针对包含访问器或设置器的属性描述有效)set获取该属性的设置器函数(setter)。 如果没有设置器, 该值为undefined。(仅针对包含访问器或设置器的属性描述有效)configurable当且仅当指定对象的属性描述可以被改变或者属性可被删除时,为true。enumerable当且仅当指定对象的属性可以被枚举出时,为true。
x 与 y 两者“属性描述”的区别
Object.getOwnPropertyDescriptor(globalThis, 'x').configurable; // false
Object.getOwnPropertyDescriptor(globalThis, 'y').configurable; // true
configurable 字段的说明:当该(x)属性的 描述符够被改变,同时该属性也能从对应的对象上(globalThis)被删除时,返回true 。
解:
var x = y = {n: 2};
- var x 定义的全局变两,被加入varNames列表,varNames列表中的变量
configurable为false,不可被删除; - y = {n: 2}; 隐式声明了一个全局变量,不会被存进varNames列表,
configurable为true,可被删除。