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


当前回答

在最近的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

其他回答

来自lodash.js。

var undefined;
function isUndefined(value) {
  return value === undefined;
}

它创建了一个名为undefined的局部变量,该变量用默认值(即真正的undefineed)初始化,然后将该值与变量undefine进行比较。


更新日期:2019年9月9日

我发现Lodash更新了它的实现。查看我的问题和代码。

要做到防弹,只需使用:

function isUndefined(value) {
  return value === void 0;
}
if ( typeof( something ) == "undefined") 

这对我有用,而其他人没有。

以下是我的情况:

我正在使用REST调用的结果。结果应该从JSON解析为JavaScript对象。

有一个错误我需要辩护。如果REST调用的参数不正确,并且用户指定了错误的参数,则REST调用基本上返回为空。

在使用这篇文章来帮助我抵御这一挑战时,我尝试了这样做:

if( typeof restResult.data[0] === "undefined" ) { throw  "Some error"; }

对于我的情况,如果restResult.data[0]==“object”,那么我可以安全地开始检查其余成员。如果未定义,则抛出上述错误。

我想说的是,就我的情况而言,本文中之前的所有建议都不起作用。我并不是说我是对的,每个人都是错的。我根本不是一个JavaScript大师,但希望这会对某人有所帮助。

查看注释,对于那些想同时检查两者的人来说,它是未定义的还是其值为空:

//Just in JavaScript
var s; // Undefined
if (typeof s == "undefined" || s === null){
    alert('either it is undefined or value is null')
}

如果您使用的是jQueryLibrary,那么jQuery.isEmptyObject()将足以满足这两种情况,

var s; // Undefined
jQuery.isEmptyObject(s); // Will return true;

s = null; // Defined as null
jQuery.isEmptyObject(s); // Will return true;

//Usage
if (jQuery.isEmptyObject(s)) {
    alert('Either variable:s is undefined or its value is null');
} else {
     alert('variable:s has value ' + s);
}

s = 'something'; // Defined with some value
jQuery.isEmptyObject(s); // Will return false;
function isUnset(inp) {
  return (typeof inp === 'undefined')
}

如果变量已设置,则返回false;如果未定义,则返回true。

然后使用:

if (isUnset(var)) {
  // initialize variable here
}