Object.getOwnPropertyDescriptor()
Object.getOwnPropertyDescriptor()
静态方法返回一个对象,该对象描述给定对象上的特定属性的配置(即直接存在于对象上而不是在对象的原型链中)。返回的对象是可变的,但改变它对原始属性的配置没有影响。
¥The Object.getOwnPropertyDescriptor()
static method returns an
object describing the configuration of a specific property on a given object (that is,
one directly present on an object and not in the object's prototype chain). The object
returned is mutable but mutating it has no effect on the original property's
configuration.
Try it
语法
参数
返回值
描述
¥Description
该方法允许检查属性的精确描述。JavaScript 中的属性由字符串值名称或 Symbol
和属性描述符组成。有关属性描述符类型及其属性的更多信息可以在 Object.defineProperty()
中找到。
¥This method permits examination of the precise description of a property. A
property in JavaScript consists of either a string-valued name or a
Symbol
and a property descriptor. Further information about property
descriptor types and their attributes can be found in
Object.defineProperty()
.
属性描述符是具有以下一些属性的记录:
¥A property descriptor is a record with some of the following attributes:
value
-
与属性关联的值(仅限数据描述符)。
writable
-
true
当且仅当与属性关联的值可以更改时(仅限数据描述符)。 get
-
充当属性的 getter 的函数,如果没有 getter,则为
undefined
(仅限访问器描述符)。 set
-
充当属性 setter 的函数,如果没有 setter,则为
undefined
(仅限访问器描述符)。 configurable
-
true
当且仅当该属性描述符的类型可以更改并且该属性可以从相应的对象中删除时。 enumerable
-
true
当且仅当该属性在相应对象的属性枚举过程中出现时。
示例
使用 Object.getOwnPropertyDescriptor()
¥Using Object.getOwnPropertyDescriptor()
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
// }
非对象强制
¥Non-object coercion
在 ES5 中,如果该方法的第一个参数不是对象(原语),那么它将导致 TypeError
。在 ES2015 中,非对象第一个参数首先会被强制转换为对象。
¥In ES5, if the first argument to this method is not an object (a primitive), then it
will cause a TypeError
. In ES2015, a non-object first argument will be
coerced to an object at first.
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
// }
规范
Specification |
---|
ECMAScript Language Specification # sec-object.getownpropertydescriptor |
浏览器兼容性
BCD tables only load in the browser