本文详细介绍 ES5 中 Object.defineProperty 和 Object.keys 两个方法。defineProperty 用于定义或修改对象属性,通过 writable、enumerable、configurable 三个特性控制属性的可写、可枚举及可配置状态。Object.keys 则用于获取对象自身可枚举属性的名称数组,两者结合可更精细地操作 JavaScript 对象。
文章导读:
本文主要介绍 ES5 规范中引入的两个常用对象操作方法:defineProperty() 和 keys()。
借助这两个方法,开发者可以更便捷地操作对象、读取属性以及进行赋值修改。其中最具价值的是它们能够限制对象属性的修改权限,接下来我们将深入探讨具体用法。
一:Object.defineProperty()
Object.defineProperty() 方法用于定义对象的新属性或修改现有属性的值,并可以设置该属性是否可被修改(这是核心功能)。该方法接收三个参数。
1.1 参数说明
Object.defineProperty( obj, prop, descriptor )
| 参数 | obj | prop | descriptor |
| 含义 | 要操作的对象名称 | 对象中要操作的某个属性的名称 | 这个参数有四个特性,该参数以对象形式书写,详细写法说明如下 |
1.2 第三个参数 descriptor 说明
该参数以对象形式传递,内部包含四个特性,例如用于控制值的修改、设置是否可重写、是否可枚举以及是否可配置等特性。

1.3 实际使用
1.3.1 writable 特性
writable 特性用于设置属性是否可被重写。设置为 true 表示可重写,false 表示不可重写。使用 defineProperty 新添加的属性,其 writable 默认值为 false。
<script>
var dog={
'name':'旺财',
'age':5
}
Object.defineProperty(dog,'sex',{
value:'公',
writable:false
})
dog.sex='母' //更改属性值看其是否改变
console.log(dog);
</script>
从运行结果可以看出,尽管尝试更改 sex 的值,但打印输出并未改变。这证明设置 writable: false 成功阻止了属性值的重写,功能十分强大。
注意事项:如果是使用 defineProperty 新添加的属性,那么 writable 默认为 false 不可修改,如果是本身就有的属性而去修改值,那其仍可以修改
1.3.2 enumerable 特性
enumerable 特性用于设置属性是否可被枚举。设置为 true 表示可枚举,false 表示不可枚举。使用 defineProperty 新添加的属性,其 enumerable 默认值为 false。
<script>
var dog={
'name':'旺财',
'age':5
}
Object.defineProperty(dog,'sex',{
value:'公',
enumerable:false
})
console.log(Object.keys(dog));
</script>
从运行结果可以看出,我们遍历无法获取设置过 enumerable: false 特性的属性 sex,这证明了 false 确实不可枚举。
注意事项:如果是使用 defineProperty 新添加的属性,那么 enumerable 默认为 false 不可枚举,如果是本身就有的属性而去修改值,那其仍可以枚举
1.3.3 configurable 特性
configurable 特性用于设置属性是否可被修改(包括删除)。设置为 true 表示可修改,false 表示不可修改。使用 defineProperty 新添加的属性,其 configurable 默认值为 false。
configurable 特性的参数只能设置一次,第二次设置会无效!!
<script>
var dog={
'name':'旺财',
'age':5,
}
Object.defineProperty(dog,'sex',{
value:'公',
configurable : false
})
delete dog.sex
console.log(dog);
</script>
从运行结果可以看出,我们删除不了设置过 configurable: false 特性的属性 sex,这证明了 false 确实不可修改。
注意事项:如果是使用 defineProperty 新添加的属性,那么 configurable 默认为 false 不可修改,如果是本身就有的属性而去修改值,那其仍可以修改
二:Object.keys()
keys() 方法用于获取对象的属性名,参数为要操作的对象名称。其返回一个包含属性名的新数组(因此需要定义一个数组来接收返回值)。
Object.keys( obj )
<script>
var dog={
'name':'旺财',
'age':5,
'sex':'公'
}
var arr=Object.keys(dog)
console.log(arr);
</script>
成功返回了对象的属性名称
到此这篇关于JavaScript 对象新增方法 defineProperty 与 keys 的使用说明的文章就介绍到这了,更多相关JS defineProperty与keys 内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!