gpt4 book ai didi

javascript - JS : checking object with key vs hasOwnProperty?

转载 作者:行者123 更新时间:2023-12-04 08:04:02 27 4
gpt4 key购买 nike

我正在查看以下“二和”问题的解决方案。他们首先遍历数组并将所有数字放入一个对象中。然后他们又做了一个 for循环查看不同是否是数组中的键,但他们使用 hasOwnProperty 检查键.这样做与只检查 key 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'));

  • 它将对原型(prototype)链中具有该属性的第一个对象执行上述检查。相比之下,hasOwnProperty只会检查对象本身,而不是它的任何内部原型(prototype),是否具有该属性。

  • const objProto = {
    prop: 'val',
    };
    const obj = Object.create(objProto);

    console.log(Boolean(obj.prop));
    console.log(obj.hasOwnProperty('prop'));

    如果像本例一样,您不处理原型(prototype)继承,并且对象上的值如果存在肯定是真实的,请随意使用 obj[key] .
    有些人建议在现代 JS 中避免使用动态属性名称并使用 Maps而是出于这些目的。

    关于javascript - JS : checking object with key vs hasOwnProperty?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66309979/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com