检查JS中是否设置了数组项

Gus*_*epo 27 javascript arrays isset

我有一个阵列

    var assoc_pagine = new Array();
    assoc_pagine["home"]=0;
    assoc_pagine["about"]=1;
    assoc_pagine["work"]=2;
Run Code Online (Sandbox Code Playgroud)

我试过了

    if (assoc_pagine[var] != "undefined") {
Run Code Online (Sandbox Code Playgroud)

但它似乎没有用

我正在使用jquery,我不知道它是否可以提供帮助

谢谢

Ste*_*fan 54

使用in关键字测试是否在对象中定义了属性

if (assoc_var in assoc_pagine)
Run Code Online (Sandbox Code Playgroud)

要么

if ("home" in assoc_pagine)
Run Code Online (Sandbox Code Playgroud)

这里有很多问题.

首先,var假设一个变量具有"home","work"或"about"的值?或者你的意思是检查称为"var"的实际属性?

如果var应该是一个具有字符串值的变量,请注意这var是JavaScript中的保留字,您需要使用其他名称,例如assoc_var.

var assoc_var = "home";
assoc_pagine[assoc_var] // equals 0 in your example
Run Code Online (Sandbox Code Playgroud)

如果您打算检查名为"var"的属性,那么您只需将其放在引号内.

assoc_pagine["var"]
Run Code Online (Sandbox Code Playgroud)

然后,undefined是不一样的"undefined".您需要typeof获取对象类型的字符串表示形式.

这是所有步骤的细分.

var assoc_var = "home"; 
var value = assoc_pagine[assoc_var]; // 0
var typeofValue = typeof value; // "number"
Run Code Online (Sandbox Code Playgroud)

所以要解决你的问题

if (typeof assoc_pagine[assoc_var] != "undefined") 
Run Code Online (Sandbox Code Playgroud)

更新:正如其他答案所示,使用数组不是解决此问题的最佳方法.请考虑使用Object.

var assoc_pagine = new Object();
assoc_pagine["home"]=0;
assoc_pagine["about"]=1;
assoc_pagine["work"]=2;
Run Code Online (Sandbox Code Playgroud)

  • -1这是一团糟.很难从中得到答案.我想知道的是如何检查是否在Javascript中设置了数组项.这是我搜索到的答案,这是一个非常低质量的答案. (5认同)

bob*_*nce 14

var assoc_pagine = new Array();
assoc_pagine["home"]=0;
Run Code Online (Sandbox Code Playgroud)

不要使用Array这个.数组用于数字索引列表.只需使用plain Object({}).

您对'undefined'字符串的想法可能是这样的:

if (typeof assoc_pagine[key]!=='undefined')
Run Code Online (Sandbox Code Playgroud)

这(或多或少)与说法相同

if (assoc_pagine[key]!==undefined)
Run Code Online (Sandbox Code Playgroud)

但是,无论哪种方式,这都有点难看.你解引用可能不存在一个键(这将是任何更明智的语言错误),并依托JavaScript的给予你的特殊怪异的黑客undefined为不存在的属性值.

这也不能告诉你属性是否真的存在,或者它是否存在但是明确地设置为该undefined值.

这是一个更明确,可读和IMO全面更好的方法:

if (key in assoc_pagine)
Run Code Online (Sandbox Code Playgroud)


xav*_*m02 7

var是一个声明...所以它是一个保留字......所以只需用另一种方式调用它.这是一种更好的方法(===优于==)

if(typeof array[name] !== 'undefined') {
    alert("Has var");
} else {
    alert("Doesn't have var");
}
Run Code Online (Sandbox Code Playgroud)