Skip to content

数据属性 ​

本节目标:理解“数据属性”的核心思路,并能把它用于实际开发或面试表达。 数据属性包含了一个数据值的位置。在这个位置可以读取和写入值。

用4个特性来描述其行为(attribute)。 [[Configurable]]:表示

  • 属性能不能删:能否通过delete删除属性,从而重新定义属性;

    • 定义为false时,表示不能删除对象属性;
    • delete属性,非严格模式操作将被忽略,严格模式下报错。
  • 其他特性能不能改:定义为false时,

    • 修改Configurable和Enumerable特性会报错;
    • writable特性只有在从false改为true会报错,从true改为false则允许;
    • value值可以修改。
  • 更改属性类型:能否把属性修改为数据属性;

  • 不可逆:一旦把属性定义为false,就不能再把它变回可配置了。 [[Enumerable]]**:**表示:

  • 能否通过for-in循环返回属性;

[[Writable]]:表示:能否修改属性的值

  • 设为false时,非严格模式下赋值操作将被忽略,严格模式下报错。

[[Value]]**:**包含这个属性的数据值;

只要 writable 和 configurable 有一个为 true,就允许改动。
  1. 读取属性值的时候,从这个位置读;
  2. 写入属性值的时候,把新值保存在这个位置;

定义属性的两种方式 一、直接在对象上定义:比如通过字面量、点操作符或[]操作符定义,即使属性名来自变量。它们的[Configurable]]、[[Enumerable]、[[Writable]]特性都被设置为true,而[[Value]]被设置为指定的值(不设置为undefined)。

二、Objcet.defineProperty()方法定义或修改属性。 它接收三个参数:

  1. 属性所在的对象;
  2. 属性的名字;
  3. 一个描述符对象。其中描述符(descriptor)对象的属性必须是:configurable/enumerabel/writable/value。

在调用此方法定义新的属性时,属性的configurable/enumerabel/writable特性默认值都是false,value默认为undefined。 使用var或不使用var****定义全局变量区别

==当使用====var====声明的变量时,在挂靠为====window====的属性后,其====configurable====为== ==false====,即不可删除====delete====,可遍历,可读可写。==

==var== ==a1 = 1;==
==Object====.getOwnPropertyDescriptor(====this====,===='a1'====)========// Object {========//  value: 1,========//  writable: true,========//  enumerable: true,========//  configurable: false========// }==

==而不使用== ==var== ==命令声明变量时(或者使用属性赋值的方式声明变量),====window====上此属性的可配置性为== ==true====。==

==a2 = 1;====//== ==或者写成====window.a2 = 1;==
==Object====.getOwnPropertyDescriptor(====this====,===='a2'====)========// Object {========//  value: 1,========//  writable: true,========//  enumerable: true,========//  configurable: true========// }==

本站总访问 — 次