如何检查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

其他回答

这是什么意思:“未定义的对象属性”?

实际上,这可能意味着两件截然不同的事情!首先,它可以表示对象中从未定义过的属性,其次,它可以指具有未定义值的属性。让我们看一下这段代码:

var o = { a: undefined }

o.a是否未定义?对其值未定义。是否未定义o.b?当然根本没有属性“b”!好了,现在看看不同的方法在两种情况下的表现:

typeof o.a == 'undefined' // true
typeof o.b == 'undefined' // true
o.a === undefined // true
o.b === undefined // true
'a' in o // true
'b' in o // false

我们可以清楚地看到,obj.prop==“undefined”和obj.prop==undefineed的类型是等价的,它们不能区分这些不同的情况。obj中的“prop”可以检测属性根本没有定义并且没有注意可能未定义的属性值的情况。

那该怎么办?

1) 您想知道一个属性是由第一个含义还是第二个含义定义的(最典型的情况)。

obj.prop === undefined // IMHO, see "final fight" below

2) 您只想知道对象是否具有某些属性,而不关心其值。

'prop' in obj

笔记:

不能同时检查对象及其属性。例如,此x.a==未定义或此类型的x.a=='未定义'引发ReferenceError:如果未定义x,则未定义x。变量undefined是一个全局变量(所以实际上它在浏览器中是window.unded)。自ECMAScript第1版以来,它一直受到支持,自ECMASript 5以来,它是只读的。因此,在现代浏览器中,它不能被重新定义为真实,因为许多作者喜欢用它来吓唬我们,但这对于旧浏览器来说仍然是真实的。

最后一战:obj.prop==未定义vs obj.prop类型==“未定义”

obj.prop的加号==未定义:

它短了一点,看起来更漂亮一点如果您拼错了undefined,JavaScript引擎会给您一个错误

obj.prop的最小值==未定义:

在旧浏览器中可以重写undefined

obj.prop类型的加号==“undefined”:

它真的很普遍!它可以在新旧浏览器中使用。

obj.prop类型的最小值==“undefined”:

这里的“undefined”(拼写错误)只是一个字符串常量,因此如果您像我刚才那样拼写错误,JavaScript引擎将无法帮助您。

更新(针对服务器端JavaScript):

Node.js支持未定义为global.undefined的全局变量(也可以在没有“global”前缀的情况下使用)。我不知道服务器端JavaScript的其他实现。

if (somevariable == undefined) {
  alert('the variable is not defined!');
}

您也可以将其转换为函数,如下所示:

function isset(varname){
  return(typeof(window[varname]) != 'undefined');
}

句柄未定义

function isUndefined(variable,defaultvalue=''){

    if (variable == undefined ) return defaultvalue;
    
    return variable;

}

变量obj={und:未定义,notundefined:“我没有定义”}函数isUndefined(变量,默认值=“”){if(变量==未定义){ 返回默认值;}返回变量}console.log(is未定义(obj.und,'i am print'))console.log(isUndefined(obj.notundefined,'Iam print'))

在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
if ( typeof( something ) == "undefined") 

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