Object.hasOwn()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2022å¹´3æ.
Object.hasOwn() ã¯éçã¡ã½ããã§ãæå®ããããªãã¸ã§ã¯ãããæå®ãããããããã£ãèªèº«ã®ããããã£ã¨ãã¦æã£ã¦ããå ´åã« true ãè¿ãã¾ãããã®ããããã£ãç¶æ¿ããã¦ããå ´åãã¾ãã¯åå¨ããªãå ´åããã®ã¡ã½ãã㯠false ãè¿ãã¾ãã
ã¡ã¢:
Object.hasOwn() éçã¡ã½ãã㯠Object.hasOwnProperty() ã¤ã³ã¹ã¿ã³ã¹ã¡ã½ãããç½®ãæãããã®ã¨ãã¦æå³ããã¦ãã¾ãã
試ãã¦ã¿ã¾ããã
const object = {
prop: "exists",
};
console.log(Object.hasOwn(object, "prop"));
// äºæ³ãããçµæ: true
console.log(Object.hasOwn(object, "toString"));
// äºæ³ãããçµæ: false
console.log(Object.hasOwn(object, "undeclaredPropertyValue"));
// äºæ³ãããçµæ: false
æ§æ
Object.hasOwn(obj, prop)
弿°
obj-
ãã¹ããã JavaScript ãªãã¸ã§ã¯ãã®ã¤ã³ã¹ã¿ã³ã¹ã
prop-
ãã¹ãããããããã£ã®ååã®æååã¾ãã¯ã·ã³ãã«ã
è¿å¤
æå®ããããªãã¸ã§ã¯ããæå®ãããããããã£ãç´æ¥å®ç¾©ãã¦ããå ´åãtrue ãè¿ãã¾ãããã以å¤ã®å ´å㯠false ãè¿ãã¾ãã
解説
Object.hasOwn() ã¡ã½ããã¯ãæå®ãããããããã£ããªãã¸ã§ã¯ãã®ç´æ¥ã®ããããã£ã§ããå ´åããã®ããããã£å¤ã null ã¾ã㯠undefined ã§ãã£ã¦ããtrue ãè¿ãã¾ããããããã£ãç¶æ¿ããã¦ããããã¾ãã¯ã¾ã£ãã宣è¨ããã¦ããªãå ´åããã®ã¡ã½ãã㯠false ãè¿ãã¾ããin æ¼ç®åã¨ã¯ç°ãªãããã®ã¡ã½ããã¯ããªãã¸ã§ã¯ãã®ãããã¿ã¤ããã§ã¼ã³ã§æå®ãããããããã£ããã§ãã¯ãã¾ããã
Object.prototype.hasOwnProperty() ãããæ¨å¥¨ãããçç±ã¯ã null ãããã¿ã¤ããªãã¸ã§ã¯ãããç¶æ¿ãã hasOwnProperty() ã¡ã½ããããªã¼ãã¼ã©ã¤ããããªãã¸ã§ã¯ãã«å¯¾ãã¦åä½ãããã¨ã§ãããããã®åé¡ãåé¿ããã«ã¯ãå¥ã®ãªãã¸ã§ã¯ãã® Object.prototype.hasOwnProperty() ã«ã¢ã¯ã»ã¹ããæ¹æ³ãããã¾ããï¼Object.prototype.hasOwnProperty.call(obj, prop) ã®ããã«ï¼ãObject.hasOwn() ã®æ¹ãç´æçã§ç°¡æ½ã§ãã
ä¾
>Object.hasOwn() ã使ã£ã¦ããããã£ã®åå¨ã調ã¹ã
次ã®ã³ã¼ãã¯ãexample ãªãã¸ã§ã¯ãã« prop ã¨ããååã®ããããã£ãå«ã¾ãã¦ãããã©ããã夿ããæ¹æ³ã示ãã¦ãã¾ãã
const example = {};
Object.hasOwn(example, "prop"); // false - 'prop' ã¯å®ç¾©ããã¦ããªã
example.prop = "exists";
Object.hasOwn(example, "prop"); // true - 'prop' ã¯å®ç¾©ããã¦ãã
example.prop = null;
Object.hasOwn(example, "prop"); // true - null ã¨ãã¦å®ç¾©ããã¦ãã
example.prop = undefined;
Object.hasOwn(example, "prop"); // true - undefined ã¨ãã¦å®ç¾©ããã¦ãã
ç´æ¥ã®ããããã£ã¨ç¶æ¿ãããããããã£
以ä¸ã®ä¾ã§ã¯ãç´æ¥ã®ããããã£ã¨ãããã¿ã¤ããã§ã¼ã³ãéãã¦ç¶æ¿ãããããããã£ãåºå¥ãã¾ãã
const example = {};
example.prop = "exists";
// `hasOwn` ã¯ç´æ¥ã®ããããã£ã®å ´åã®ã¿ true ãè¿ã
Object.hasOwn(example, "prop"); // returns true
Object.hasOwn(example, "toString"); // returns false
Object.hasOwn(example, "hasOwnProperty"); // returns false
// `in` æ¼ç®åã¯ç´æ¥ã¾ãã¯ç¶æ¿ãããããããã£ã®å ´åã« true ãè¿ã
"prop" in example; // returns true
"toString" in example; // returns true
"hasOwnProperty" in example; // returns true
ãªãã¸ã§ã¯ãã®ããããã£ã®å復å¦ç
ãªãã¸ã§ã¯ãã®åæå¯è½ãªããããã£ãå復å¦çããã«ã¯ã以ä¸ã®ããã«ãã¾ãã
const example = { foo: true, bar: true };
for (const name of Object.keys(example)) {
// â¦
}
ãã for...in ã使ãå¿
è¦ãããå ´åã«ã¯ãObject.hasOwn() ã使ããã¨ã§ç¶æ¿ãããããããã£ãã¹ããããããã¨ãã§ãã¾ãã
const example = { foo: true, bar: true };
for (const name in example) {
if (Object.hasOwn(example, name)) {
// â¦
}
}
é åã®ã¤ã³ããã¯ã¹ãåå¨ãããã©ããã調ã¹ã
Array ã®è¦ç´ ã¯ç´æ¥ã®ããããã£ã¨ãã¦å®ç¾©ããã¦ããã®ã§ãhasOwn() ã¡ã½ããã§ç¹å®ã®ã¤ã³ããã¯ã¹ãåå¨ãããã©ããã調ã¹ããã¨ãã§ãã¾ãã
const fruits = ["Apple", "Banana", "Watermelon", "Orange"];
Object.hasOwn(fruits, 3); // true ('Orange')
Object.hasOwn(fruits, 4); // false - not defined
hasOwnProperty() ã®åé¡ã¨ãªãã±ã¼ã¹
ãã®ç¯ã§ã¯ãObject.hasOwn() ã hasOwnProperty() ã«å½±é¿ãä¸ããåé¡ãåé¿ãã¦ãããã¨ã示ãã¾ããæåã®ãhasOwnProperty() ãåå®è£
ãããªãã¸ã§ã¯ãã§ã使ç¨ã§ãã¾ããä¸è¨ã®å®ä¾ã§ã¯ãåå®è£
ããã hasOwnProperty() ã¡ã½ããã¯ãã¹ã¦ã®ããããã£ã«å¯¾ã㦠false ãè¿ãã¾ãããObject.hasOwn() ã®åä½ã¯å½±é¿ãåãã¾ããã
const foo = {
hasOwnProperty() {
return false;
},
bar: "The dragons be out of office",
};
console.log(foo.hasOwnProperty("bar")); // false
console.log(Object.hasOwn(foo, "bar")); // true
ã¾ãã null ãããã¿ã¤ããªãã¸ã§ã¯ãã§ã使ç¨ãããã¨ãã§ãã¾ããããã㯠Object.prototype ãç¶æ¿ãã¦ããªããããhasOwnProperty() ã¯ã¢ã¯ã»ã¹ã§ãã¾ããã
const foo = Object.create(null);
foo.prop = "exists";
console.log(foo.hasOwnProperty("prop"));
// Uncaught TypeError: foo.hasOwnProperty is not a function
console.log(Object.hasOwn(foo, "prop")); // true
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-object.hasown> |