如何检查JavaScript中的对象属性是否未定义?


当前回答

Lodash库中有几个小助手:

isUndefined-检查值是否未定义。

_.isUndefined(undefined) // => true
_.isUndefined(null) // => false

has-检查对象是否包含属性

const object = { 'a': { 'b': 2 } }

_.has(object, 'a.b') // => true
_.has(object, 'a.c') // => false

其他回答

在JavaScript中,有truthy和falsy表达式。如果要检查属性是否未定义,可以直接使用给定的If条件,

使用真/假概念。

if(!ob.someProp){
    console.log('someProp is falsy')
}

然而,还有几种方法可以检查对象是否具有属性,但对我来说似乎很长。

使用==未定义的签入if条件

if(ob.someProp === undefined){
    console.log('someProp is undefined')
}

使用的类型

typeof充当未定义值和变量是否存在的组合检查。

if(typeof ob.someProp === 'undefined'){
    console.log('someProp is undefined')
}

使用hasOwnProperty方法

JavaScript对象已在对象原型中的hasOwnProperty函数中构建。

if(!ob.hasOwnProperty('someProp')){
    console.log('someProp is undefined')
}

不深入,但第一种方法看起来很短,对我来说很好。下面是JavaScript中truthy/falsy值的详细信息,未定义的是其中列出的falsy。所以if条件的行为正常,没有任何故障。除了未定义的值之外,值NaN、false(显然)、“”(空字符串)和数字0也是假值。

警告:请确保属性值不包含任何错误值,否则if条件将返回false。对于这种情况,可以使用hasOwnProperty方法

Object.hasOwnProperty(o,'propertyname');

然而,这并不能通过原型链进行查找。

在最近的JavaScript版本中,引入了新的链接运算符,这可能是检查属性是否存在的最佳方法,否则它将给您提供未定义的

参见下面的示例

  const adventurer = {
  name: 'Alice',
  cat: {
    name: 'Dinah'
  }
};

const dogName = adventurer.dog?.name;
console.log(dogName);
// expected output: undefined

console.log(adventurer.someNonExistentMethod?.());
// expected output: undefined

我们可以替换这个旧语法

if (response && response.data && response.data.someData && response.data.someData.someMoreData) {}

使用更简洁的语法

if( response?.data?.someData?.someMoreData) {}

IE、Opera、safari和samsund android不支持此语法

有关详细信息,请查看此URL

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining

在JavaScript中,存在null和undefined。它们有不同的含义。

undefined表示变量值尚未定义;不知道值是多少。null表示变量值被定义并设置为null(没有值)。

Marijn Haverbeke在他的免费在线书《Eloquent JavaScript》(我的重点)中写道:

还有一个类似的值null,其含义是“此值已定义,但没有值”。undefined和null之间的含义差异主要是学术性的,通常不太有趣。在实际程序中,经常需要检查某个东西是否“有价值”。在这些情况下,可以使用表达式something==undefined,因为即使它们不是完全相同的值,null==undefine也会产生true。

所以,我想最好的检查方法是:

if (something == undefined)

对象财产的工作方式应该相同。

var person = {
    name: "John",
    age: 28,
    sex: "male"
};

alert(person.name); // "John"
alert(person.fakeVariable); // undefined
"propertyName" in obj //-> true | false