更新部分文档错误

This commit is contained in:
xie jie 2024-02-02 10:53:18 +08:00
parent 4f049e4689
commit 9154c268fe

View File

@ -4,47 +4,35 @@
## 经典真题
- *JavaScript* 中对象的属性描述符有哪些?分别有什么作用?
## 属性描述符详解
*JavaScript* 中,对象的属性可以分为两种:
- 数据属性:它的本质就是一个数据
- 存取器属性:它的本质是一个函数,但是可以将它当作普通属性来使用,当给该属性赋值时,会运行相应的 *setter* 函数,当获取该属性的值时,会运行相应的 *getter* 函数。除了存取器,还有一些其他的关键字,用以表示当前属性是否可写、是否有默认值、是否可枚举等,这些关键字就是属性描述符。
属性描述符是 *ECMAScript* 5 新增的语法,它其实就是一个内部对象,用来描述对象的属性的特性。
### 属性描述符的结构
在定义对象、定义属性时,我们曾经介绍过属性描述符,属性描述符实际上就是一个对象。
属性描述符一共有 *6* 个,可以选择使用。
- *value*:设置属性值,默认值为 *undefined*
- *writable*:设置属性值是否可写,默认值为 *true*。
- *enumerable*:设置属性是否可枚举,即是否允许使用 *for/in* 语句或 *Object.keys( )* 函数遍历访问,默认为 *true*。
- *configurable*设置是否可设置属性特性,默认为 *true*。如果为 *false*,将无法删除该属性,不能够修改属性值,也不能修改属性的属性描述符
- *writable*:设置属性值是否可写,默认值为 *false*。
- *enumerable*:设置属性是否可枚举,即是否允许使用 *for/in* 语句或 *Object.keys( )* 函数遍历访问,默认为 *false*。
- *configurable*当设置为 false 时,该属性的类型不能在数据属性和访问器属性之间更改,且该属性不可被删除,且其描述符的其他属性也不能被更改(但是,如果它是一个可写的数据描述符,则 value 可以被更改writable 可以更改为 false。默认值为 false
- *get*:取值函数,默认为 *undefined*
- *set*:存值函数,默认为 *undefined*
注意这几个属性不是都可以一起设置,具体如下图:
![image-20211021111647398](https://xiejie-typora.oss-cn-chengdu.aliyuncs.com/2021-10-21-031647.png)
@ -105,8 +93,6 @@ Object.defineProperty(obj, 'x', {configurable: true}); //抛出异常
### *get**set* 函数
除了使用点语法或中括号语法访问属性的 *value* 外,还可以使用访问器,包括 *set**get* 两个函数。
其中,*set( )* 函数可以设置 *value* 属性值,而 *get( )* 函数可以读取 *value* 属性值。
@ -253,8 +239,6 @@ console.log(obj.y); //2
### 控制对象状态
*JavaScript* 提供了 *3* 种方法,用来精确控制一个对象的读写状态,防止对象被改变。
- *Object.preventExtensions*:阻止为对象添加新的属性。
@ -293,8 +277,6 @@ console.log(Object.isFrozen(obj3)); //false
## 真题解答
- *JavaScript* 中对象的属性描述符有哪些?分别有什么作用?
> 参考答案:
@ -302,9 +284,9 @@ console.log(Object.isFrozen(obj3)); //false
> 属性描述符一共有 *6* 个,可以选择使用。
>
> - *value*:设置属性值,默认值为 *undefined*
> - *writable*:设置属性值是否可写,默认值为 *true*。
> - *enumerable*:设置属性是否可枚举,即是否允许使用 *for/in* 语句或 *Object.keys( )* 函数遍历访问,默认为 *true*。
> - *configurable*设置是否可设置属性特性,默认为 *true*。如果为 *false*,将无法删除该属性,不能够修改属性值,也不能修改属性的属性描述符
> - *writable*:设置属性值是否可写,默认值为 *false*。
> - *enumerable*:设置属性是否可枚举,即是否允许使用 *for/in* 语句或 *Object.keys( )* 函数遍历访问,默认为 *false*。
> - *configurable*当设置为 false 时,该属性的类型不能在数据属性和访问器属性之间更改,且该属性不可被删除,且其描述符的其他属性也不能被更改(但是,如果它是一个可写的数据描述符,则 value 可以被更改writable 可以更改为 false。默认值为 false
> - *get*:取值函数,默认为 *undefined*
> - *set*:存值函数,默认为 *undefined*
>