gpt4 book ai didi

javascript - 未定义,未定义类型,hasOwnProperty

转载 作者:行者123 更新时间:2023-12-03 12:40:12 25 4
gpt4 key购买 nike

拿这个片段,

var a = {

}

if(typeof a.c === 'undefined'){
console.log('inside if');
}
if(a.c === undefined){
console.log('inside if');
}

两个 if结果 true . 特定于某些浏览器的这两种语句有什么区别吗?

另外,在我的上一个项目中,我已经使用了 typeof a.c == 'undefined'多次检查 json 中的值数据。

现在,我知道这不是好方法,因为某些值可能是 undefined也是,所以我的逻辑会失败。

我应该使用 hasOwnProperty .

但我确信 undefined 不会有任何值(value)。 , 我可以用 typeof a.c == 'undefined'代替 hasOwnProperty或者我应该改变我所有的 typeofhasOwnProperty

最佳答案

( 更新 :您可能想查看这个问题:variable === undefined vs. typeof variable === "undefined" )。

非常旧浏览器(Netscape 2、IIRC,可能还有 IE 4 或更低版本),您无法将值与 undefined 进行比较,因为这导致了错误。然而,在任何(半)现代浏览器中,没有理由检查 typeof value === 'undefined'而不是 value === undefined (除了有人可能重新定义了变量 undefined 的妄想症)。
hasOwnProperty服务于不同的目的。它检查对象是否具有给定名称的属性,而不是其原型(prototype);即无论继承的属性如何。如果你想检查一个对象是否包含某个属性,继承与否,你应该使用 if ('c' in a) { ...

但基本上,这些可能都会起作用:

if (a.c === undefined) console.log('No c in a!');
if (typeof a.c === 'undefined') console.log('No c in a!');
if (!('c' in a)) console.log('No c in a!');
if (!a.hasOwnProperty('c')) console.log('No c in a!');

主要区别在于:
  • a.c === undefined如果有人做了 undefined = 'defined' 会产生意想不到的结果或一些这样的把戏;
  • !('c' in a)不是很可读(恕我直言)
  • !a.hasOwnProperty('c')将返回 false如果对象 a不包含属性 c ,但它的原型(prototype)可以。

  • 就个人而言,我更喜欢第一个,因为它更具可读性。如果您偏执并想避免重新定义 undefined 的风险,将您的代码包装在一个自动执行的匿名函数中,如下所示:
    (function (undefined) {
    // in here, 'undefined' is guaranteed to be undefined. :-)

    var a = {

    };

    })();

    关于javascript - 未定义,未定义类型,hasOwnProperty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10895288/

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