JavaScript学习笔记

151 阅读1分钟

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列表中的变量configurablefalse,不可被删除;
  • y = {n: 2}; 隐式声明了一个全局变量,不会被存进varNames列表,configurabletrue,可被删除。