Object.getOwnPropertyDescriptor()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2015å¹´7æ.
Object.getOwnPropertyDescriptor() ã¯éçã¡ã½ããã§ãä¸ãããããªãã¸ã§ã¯ãã®ç¹å®ã®ãããã㣠(ããªãã¡ããããªãã¸ã§ã¯ãã®ç´æ¥ã®è¡¨ç¾ã§ããããªãã¸ã§ã¯ãã®ãããã¿ã¤ããã§ã¼ã³å
ã®ãã®ã§ã¯ãªã) ã®æ§æãè¨è¿°ãããªãã¸ã§ã¯ããè¿ãã¾ããè¿ããããªãã¸ã§ã¯ãã¯å¤æ´å¯è½ã§ããã夿´ãã¦ãå
ã®ããããã£ã®æ§æã«ã¯å½±é¿ãä¸ãã¾ããã
試ãã¦ã¿ã¾ããã
const object = {
foo: 42,
};
const descriptor = Object.getOwnPropertyDescriptor(object, "foo");
console.log(descriptor.configurable);
// äºæ³ãããçµæ: true
console.log(descriptor.value);
// äºæ³ãããçµæ: 42
æ§æ
Object.getOwnPropertyDescriptor(obj, prop)
弿°
è¿å¤
æå®ããããããã£ããªãã¸ã§ã¯ãã«ããå ´åã¯ãããããã£è¨è¿°åã§ããã以å¤ã®å ´å㯠undefined ã§ãã
解説
ãã®ã¡ã½ããã§ãããããã£ã®æ£ç¢ºãªå®ç¾©ã確èªãããã¨ãã§ãã¾ãã JavaScript ã®ããããã£ã¯ãæååå¤ã®ååã¾ã㯠Symbol ã¨ããããã£è¨è¿°åããæãã¾ããããããã£è¨è¿°åããã³ãã®å±æ§ã«ã¤ãã¦ã®è©³ç´°æ
å ±ã¯ã Object.defineProperty() ã«ããã¾ãã
ããããã£è¨è¿°åã¯ã以ä¸ã®å±æ§ã®ããã¤ããè¨é²ãããã®ã§ãã
value-
ããããã£ã«é¢é£ã¥ããããå¤ã§ã (ãã¼ã¿è¨è¿°åã®ã¿)ã
writable-
trueã§ããå ´åãããããã£ã«é¢é£ã¥ããããå¤ã¯å¤æ´ãããã¨ãã§ãã¾ã (ãã¼ã¿è¨è¿°åã®ã¿)ã get-
ããããã£ã®ã²ãã¿ã¼ã¨ãã¦æä¾ãã颿°ããããã¯ã²ãã¿ã¼ããªãå ´åã¯
undefinedã§ã (ã¢ã¯ã»ãµã¼è¨è¿°åã®ã¿)ã set-
ããããã£ã®ã»ãã¿ã¼ã¨ãã¦æä¾ãã颿°ããããã¯ã»ãã¿ã¼ããªãå ´åã¯
undefinedã§ã (ã¢ã¯ã»ãµã¼è¨è¿°åã®ã¿)ã configurable-
trueã§ããå ´åããã®ç¨®ã®è¨è¿°åã夿´ãããã¨ãã対å¿ãããªãã¸ã§ã¯ãããããããã£ãåé¤ãããã¨ãã§ãã¾ãã enumerable-
trueã§ããå ´åããã®ããããã£ã¯å¯¾å¿ãããªãã¸ã§ã¯ãã§ã®ããããã£åæã«ç¾ãã¾ãã
ä¾
>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
// }
ãªãã¸ã§ã¯ã以å¤ã®å夿
ECMAScript 5 ã§ã¯ããã®ã¡ã½ããã¸ã®æåã®å¼æ°ããªãã¸ã§ã¯ãã§ãªã (ããªããã£ãã§ãã) å ´åã¯ã TypeError ãçºçãã¾ãã ECMAScript 2015 ã§ã¯ãæåã®å¼æ°ããªãã¸ã§ã¯ãã§ãªãã¦ããæåã«å¼·å¶çã«ãªãã¸ã§ã¯ãã«å¤æãã¾ãã
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® 2027 Language Specification> # sec-object.getownpropertydescriptor> |