簡體   English   中英

JS:檢查 object 與 key vs hasOwnProperty?

[英]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'));

  • 它將對原型鏈中具有該屬性的第一個object 執行上述檢查。 相反, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM