Object.getOwnPropertyDescriptor()
静态方法 Object.getOwnPropertyDescriptor() 返回一个描述给定对象上特定属性的配置的对象(即,直接存在于对象上,不在对象的原型链上的属性)。返回的对象是可变的,但修改它不会影响原始属性的配置。
试一试
const object = {
foo: 42,
};
const descriptor = Object.getOwnPropertyDescriptor(object, "foo");
console.log(descriptor.configurable);
// Expected output: true
console.log(descriptor.value);
// Expected output: 42
语法
js
Object.getOwnPropertyDescriptor(obj, prop)
参数
返回值
如果给定属性存在于对象上,则返回该属性的属性描述符,否则返回 undefined。
描述
此方法允许检查属性的精确描述。JavaScript 中的属性由一个字符串值名称或一个 Symbol 和一个属性描述符组成。有关属性描述符类型及其属性的更多信息,请参见 Object.defineProperty()。
属性描述符是一个包含以下部分或全部属性的记录:
示例
使用 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® 2026 语言规范 # sec-object.getownpropertydescriptor |
浏览器兼容性
加载中…