Object.prototype.hasOwnProperty()
åºçº¿
广æ³å¯ç¨
èª 2015å¹´7æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
hasOwnProperty() æ¹æ³è¿åä¸ä¸ªå¸å°å¼ï¼è¡¨ç¤ºå¯¹è±¡èªæå±æ§ï¼è䏿¯ç»§æ¿æ¥ç屿§ï¼ä¸æ¯å¦å
·ææå®ç屿§ã
夿³¨ï¼å¨æ¯æ Object.hasOwn çæµè§å¨ä¸ï¼å»ºè®®ä½¿ç¨ Object.hasOwn()ï¼èé hasOwnProperty()ã
å°è¯ä¸ä¸
const object1 = {};
object1.property1 = 42;
console.log(object1.hasOwnProperty("property1"));
// Expected output: true
console.log(object1.hasOwnProperty("toString"));
// Expected output: false
console.log(object1.hasOwnProperty("hasOwnProperty"));
// Expected output: false
è¯æ³
hasOwnProperty(prop)
åæ°
è¿åå¼
å¦æå¯¹è±¡ææå®å±æ§ä½ä¸ºèªæå±æ§ï¼åè¿å trueï¼å¦åè¿å falseã
æè¿°
妿æå®ç屿§æ¯å¯¹è±¡çç´æ¥å±æ§ââå³ä½¿å¼ä¸º null æè
undefinedï¼hasOwnProperty() æ¹æ³ä¹ä¼è¿å trueã妿屿§æ¯ç»§æ¿çï¼æè
æ ¹æ¬æ²¡æå£°æè¯¥å±æ§ï¼åè¯¥æ¹æ³è¿å falseãä¸ in è¿ç®ç¬¦ä¸åçæ¯ï¼è¯¥æ¹æ³ä¸ä¼å¨å¯¹è±¡ååé¾ä¸æ£æ¥æå®ç屿§ã
è¯¥æ¹æ³å¯ä»¥å¨å¤§å¤æ° JavaScript 对象ä¸ä½¿ç¨ï¼å ä¸ºå¤§å¤æ°å¯¹è±¡é½æ¯ä» Object æ´¾çèæ¥ï¼å æ¤ä¼ç»§æ¿è¯¥æ¹æ³ãä¾å¦ Array æ¯ä¸ä¸ª Objectï¼æä»¥ä½ å¯ä»¥ä½¿ç¨ hasOwnProperty() æ¹æ³æ¥æ£æ¥ç´¢å¼æ¯å¦åå¨ï¼
const fruits = ["Apple", "Banana", "Watermelon", "Orange"];
fruits.hasOwnProperty(3); // è¿å true ('Orange')
fruits.hasOwnProperty(4); // è¿å falseââæªå®ä¹
妿å¨å¯¹è±¡ä¸éæ°å®ç°äºè¯¥æ¹æ³ï¼æè
ä½¿ç¨ Object.create(null) å建äºå¯¹è±¡ï¼è¿äºå¯¹è±¡ä¸ç»§æ¿èª Object.prototypeï¼ï¼åè¯¥æ¹æ³å°ä¸å¯ç¨ãä¸é¢ç»åºäºè¿äºæ
åµç示ä¾ã
示ä¾
>ä½¿ç¨ hasOwnProperty æµè¯èªæå±æ§æ¯å¦åå¨
以ä¸ä»£ç å±ç¤ºäºå¦ä½ç¡®å® example 对象å
å«äºä¸ä¸ªå为 prop ç屿§ã
const example = {};
example.hasOwnProperty("prop"); // è¿å false
example.prop = "exists";
example.hasOwnProperty("prop"); // è¿å trueâââpropâå·²å®ä¹
example.prop = null;
example.hasOwnProperty("prop"); // è¿å trueââèªæå±æ§åå¨ä¸å¼ä¸º null
example.prop = undefined;
example.hasOwnProperty("prop"); // è¿å trueââèªæå±æ§åå¨ä¸å¼ä¸º undefined
ç´æ¥å±æ§ vs ç»§æ¿å±æ§
以ä¸ç¤ºä¾åºåäºç´æ¥å±æ§åéè¿ååé¾ç»§æ¿ç屿§ï¼
const example = {};
example.prop = "exists";
// `hasOwnProperty` ä»
å¯¹ç´æ¥å±æ§è¿å trueï¼
example.hasOwnProperty("prop"); // è¿å true
example.hasOwnProperty("toString"); // è¿å false
example.hasOwnProperty("hasOwnProperty"); // è¿å false
// 对äºç´æ¥æç»§æ¿ç屿§ï¼`in` è¿ç®ç¬¦å°è¿å trueï¼
"prop" in example; // è¿å true
"toString" in example; // è¿å true
"hasOwnProperty" in example; // è¿å true
éå对象ç屿§
以ä¸ç¤ºä¾å±ç¤ºäºå¦ä½å¨å¿½ç¥ç»§æ¿å±æ§çæ åµä¸è¿ä»£ä¸ä¸ªå¯¹è±¡ç坿䏾屿§ã
const buz = {
fog: "stack",
};
for (const name in buz) {
if (buz.hasOwnProperty(name)) {
console.log(`this is fog (${name}) for sure. Value: ${buz[name]}`);
} else {
console.log(name); // toString æå
¶ä»çæ¹æ³ç
}
}
请注æï¼for...in 循ç¯åªè¿ä»£å¯æä¸¾å±æ§ï¼å¾ªç¯ä¸æ²¡æååºé坿䏾屿§å¹¶ä¸æå³ç hasOwnProperty æ¬èº«è¢«ä¸¥æ ¼éå¶å¨å¯æä¸¾å±æ§ä¸ï¼å Object.getOwnPropertyNames() 䏿 ·ï¼ã
ä½¿ç¨ hasOwnProperty ä½ä¸ºå±æ§åç§°
JavaScript å¹¶ä¸ä¿æ¤å±æ§åç§° hasOwnPropertyï¼å
·ææ¤åç§°å±æ§ç对象å¯è½ä¼è¿å䏿£ç¡®çç»æï¼
const foo = {
hasOwnProperty() {
return false;
},
bar: "Here be dragons",
};
foo.hasOwnProperty("bar"); // è¯¥éæ°å®ç°å§ç»è¿å false
å
æè¿ä¸ªé®é¢çæ¨èæ¹æ³æ¯ï¼å¨æ¯æçæµè§å¨ä¸ä½¿ç¨ Object.hasOwn()ãå
¶ä»æ¿ä»£æ¹æ¡å
æ¬ä½¿ç¨å¤é¨ç hasOwnPropertyï¼
const foo = { bar: "Here be dragons" };
// ä½¿ç¨ Object.hasOwn() æ¹æ³ââæ¨è
Object.hasOwn(foo, "bar"); // è¿å true
// ä½¿ç¨ Object ååä¸ç hasOwnProperty 屿§
Object.prototype.hasOwnProperty.call(foo, "bar"); // è¿å true
// 使ç¨å¦ä¸ä¸ª Object ç hasOwnPropertyï¼å¹¶å¨âthisâ设置为 foo çæ
åµä¸è°ç¨å®
({}).hasOwnProperty.call(foo, "bar"); // è¿å true
请注æï¼å¨åä¸¤ç§æ åµä¸ï¼æ²¡ææ°å建ç对象ã
ç± Object.create(null) å建ç对象
ä½¿ç¨ Object.create(null) å建ç对象ä¸ä» Object.prototype ç»§æ¿ï¼ä½¿å¾ hasOwnProperty() ä¸å¯è®¿é®ã
const foo = Object.create(null);
foo.prop = "exists";
foo.hasOwnProperty("prop"); // Uncaught TypeError: foo.hasOwnProperty is not a function
è¿ç§æ
åµä¸çè§£å³æ¹æ¡ä¸ä¸ä¸èç¸åï¼ä½¿ç¨ Object.hasOwn()ï¼å¦å使ç¨å¤é¨å¯¹è±¡ç hasOwnProperty()ã
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-object.prototype.hasownproperty> |