![](/img/trans.png)
[英]Checking existence of hash key without hasOwnProperty in JavaScript
[英]JS: checking object with key vs hasOwnProperty?
我正在查看以下“二和”問題的解決方案。 他們首先遍歷數組並將所有數字放入 object 中。 然后他們做了另一個for
循環來查看不同的是否是數組中的一個鍵,但他們使用hasOwnProperty
檢查了該鍵。 這樣做與僅檢查密鑰 ex: if (obj[key]) {....}
有什么區別
const twoSum_On_Better = (arr, target) => {
let numObject = {};
for (let i = 0; i < arr.length; i++) {
let thisNum = arr[i];
numObject[thisNum] = i;
}
for (var i = 0; i < arr.length; i++) {
let diff = target - arr[i];
if (numObject.hasOwnProperty(diff) && numObject[diff] !== i) {
return [i, numObject[diff]];
}
}
}
使用obj[key]
有兩個潛在的缺點:
const obj = { prop: 0, }; console.log(Boolean(obj.prop)); console.log(obj.hasOwnProperty('prop'));
hasOwnProperty
只會檢查object 本身,而不是它的任何內部原型,是否具有該屬性。 const objProto = { prop: 'val', }; const obj = Object.create(objProto); console.log(Boolean(obj.prop)); console.log(obj.hasOwnProperty('prop'));
如果像在這種情況下,您不是在處理原型 inheritance,並且 object 上的值如果存在肯定是真實的,請隨意使用obj[key]
。
一些人建議在現代 JS 中避免使用動態屬性名稱,而是使用Maps來實現這些目的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.