Object.getOwnPropertyDescriptor()
**Object.getOwnPropertyDescriptor()
** 静态方法返回一个对象,该对象描述了给定对象上特定属性的配置(即,直接出现在对象上而不是在对象的原型链中的属性)。返回的对象是可变的,但对其进行修改不会影响原始属性的配置。
试试看
语法
js
Object.getOwnPropertyDescriptor(obj, prop)
参数
返回值
如果给定属性存在于对象中,则为该属性的属性描述符,否则为undefined
。
描述
此方法允许检查属性的精确描述。JavaScript 中的属性由字符串值名称或Symbol
和属性描述符组成。有关属性描述符类型及其属性的更多信息,请参见Object.defineProperty()
。
属性描述符是包含以下某些属性的记录
value
-
与属性关联的值(仅数据描述符)。
writable
-
如果且仅当与属性关联的值可以更改时,则为
true
(仅数据描述符)。 get
-
充当属性获取器的函数,如果不存在获取器,则为
undefined
(仅访问器描述符)。 set
-
充当属性设置器的函数,如果不存在设置器,则为
undefined
(仅访问器描述符)。 configurable
-
如果且仅当此属性描述符的类型可以更改以及可以从相应对象中删除属性时,则为
true
。 enumerable
-
如果且仅当此属性在枚举相应对象上的属性时显示,则为
true
。
示例
使用 Object.getOwnPropertyDescriptor()
js
let o, d;
o = {
get foo() {
return 17;
},
};
d = Object.getOwnPropertyDescriptor(o, "foo");
console.log(d);
// {
// configurable: true,
// enumerable: true,
// get: [Function: get foo],
// set: undefined
// }
o = { bar: 42 };
d = Object.getOwnPropertyDescriptor(o, "bar");
console.log(d);
// {
// configurable: true,
// enumerable: true,
// value: 42,
// writable: true
// }
o = { [Symbol.for("baz")]: 73 };
d = Object.getOwnPropertyDescriptor(o, Symbol.for("baz"));
console.log(d);
// {
// configurable: true,
// enumerable: true,
// value: 73,
// writable: true
// }
o = {};
Object.defineProperty(o, "qux", {
value: 8675309,
writable: false,
enumerable: false,
});
d = Object.getOwnPropertyDescriptor(o, "qux");
console.log(d);
// {
// value: 8675309,
// writable: false,
// enumerable: false,
// configurable: false
// }
非对象强制转换
在 ES5 中,如果此方法的第一个参数不是对象(原始值),则会导致TypeError
。在 ES2015 中,非对象第一个参数将首先被强制转换为对象。
js
Object.getOwnPropertyDescriptor("foo", 0);
// TypeError: "foo" is not an object // ES5 code
Object.getOwnPropertyDescriptor("foo", 0);
// Object returned by ES2015 code: {
// configurable: false,
// enumerable: true,
// value: "f",
// writable: false
// }
规范
规范 |
---|
ECMAScript 语言规范 # sec-object.getownpropertydescriptor |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。