设置我有一个数组检查数组项目在JS
var assoc_pagine = new Array();
assoc_pagine["home"]=0;
assoc_pagine["about"]=1;
assoc_pagine["work"]=2;
我试图
if (assoc_pagine[var] != "undefined") {
,但它似乎没有工作
我使用jquery,我不知道它是否可以帮到
谢谢
设置我有一个数组检查数组项目在JS
var assoc_pagine = new Array();
assoc_pagine["home"]=0;
assoc_pagine["about"]=1;
assoc_pagine["work"]=2;
我试图
if (assoc_pagine[var] != "undefined") {
,但它似乎没有工作
我使用jquery,我不知道它是否可以帮到
谢谢
使用in
关键字测试如果一个属性在一个对象
if (assoc_var in assoc_pagine)
OR
if ("home" in assoc_pagine)
这里有相当多的问题定义。
首先,是var
假定变量的值为“home”,“work”或“about”?或者你是否想要检查名为“var”的实际属性?
如果var
应该是一个具有字符串值的变量,请注意,var
是JavaScript中的保留字,您需要使用其他名称,例如assoc_var
。
var assoc_var = "home";
assoc_pagine[assoc_var] // equals 0 in your example
如果您打算检查名为“var”的属性,那么您简单地需要将它放在引号内。
assoc_pagine["var"]
然后,undefined
是不一样的"undefined"
。您将需要typeof
以获取对象类型的字符串表示形式。
这是所有步骤的细分。
var assoc_var = "home";
var value = assoc_pagine[assoc_var]; // 0
var typeofValue = typeof value; // "number"
因此,要解决您的问题
if (typeof assoc_pagine[assoc_var] != "undefined")
更新:至于其他的答案表明,使用阵列是不是这个问题的最佳sollution。考虑使用对象代替。
var assoc_pagine = new Object();
assoc_pagine["home"]=0;
assoc_pagine["about"]=1;
assoc_pagine["work"]=2;
var是一个语句...所以这是一个保留字......所以只是把它的另一种方式。 这就是做一个更好的方式(===比==更好)
if(typeof array[name] !== 'undefined') {
alert("Has var");
} else {
alert("Doesn't have var");
}
var assoc_pagine = new Array();
assoc_pagine["home"]=0;
不要使用此一Array
。数组用于数字索引列表。只需使用普通的Object
({}
)。
你所用'undefined'
串想着大概是这样的:
if (typeof assoc_pagine[key]!=='undefined')
这话说
if (assoc_pagine[key]!==undefined)
然而,无论哪种方式,这是一个有点(或多或少)相同丑陋。您正在取消引用可能不存在的关键字(这在任何更明智的语言中都是错误的),并且依赖于JavaScript的奇怪黑客手段,为您提供不存在的属性的特殊undefined
值。
这也不完全告诉你,如果属性真的不是那里,或者如果它存在但明确设置为undefined
值。
这是一个更加明确,可读性和IMO全方位的更好的方法:
if (key in assoc_pagine)
这不是一个数组。 更好的声明这样说:
var assoc_pagine = {};
assoc_pagine["home"]=0;
assoc_pagine["about"]=1;
assoc_pagine["work"]=2;
或
var assoc_pagine = {
home:0,
about:1,
work:2
};
要检查的对象包含了一些标签,你只需做这样的事情:
if('work' in assoc_pagine){
// do your thing
};
function isset(key){
ret = false;
array_example.forEach(function(entry) {
if(entry == key){
ret = true;
}
});
return ret;
}
alert(isset("key_search"));
这根本不起作用。 – Omn 2015-01-04 06:47:58
TLDR;我能想出的最好的是这样的:(根据您的使用情况下,有许多的方法来优化该功能。)
function arrayIndexExists(array, index){
if (typeof index !== 'number' && index === parseInt(index).toString()) {
index = parseInt(index);
} else {
return false;//to avoid checking typeof again
}
return typeof index === 'number' && index % 1===0 && index >= 0 && array.hasOwnKey(index);
}
对方回答的例子亲近,将一些工作(可能是最)的目的,但在技术上相当不正确,我下面解释的原因。
Javascript数组只使用'数字'键。在数组上设置“关联键”时,实际上是在该数组对象上设置一个属性,而不是该数组的一个元素。例如,这意味着当使用Array.forEach()时,“关联密钥”不会被迭代,并且在计算Array.length时不会被包含。 (例外是这样的字符串'0'将解析为数组的元素,但'0'字符串不会)。
此外,检查不存在的数组元素或对象属性会评估因为未定义,但实际上并没有告诉你数组元素或对象属性尚未设置。例如,未定义也是通过调用不以return语句终止的函数得到的结果。这可能会导致一些奇怪的错误和难以调试的代码。
这可能令人困惑,但可以使用浏览器的javascript控制台轻松探索。 (我使用了chrome,每个注释都表示它之前的行的评估值)。
var foo = new Array();
foo;
//[]
foo.length;
//0
foo['bar'] = 'bar';
//"bar"
foo;
//[]
foo.length;
//0
foo.bar;
//"bar"
这表明关联键不用于访问数组中的元素,而是用于对象的属性。
foo[0] = 0;
//0
foo;
//[0]
foo.length;
//1
foo[2] = undefined
//undefined
typeof foo[2]
//"undefined"
foo.length
//3
这表明检查typeof不允许您查看是否设置了元素。
var foo = new Array();
//undefined
foo;
//[]
foo[0] = 0;
//0
foo['0']
//0
foo[' 0']
//undefined
这说明我上面提到的例外,为什么你不能只使用parseInt函数();
如果你想使用关联数组,你最好使用简单的对象作为其他答案的建议。
javascript中的数组不使用关联键。在数组上设置“关联键”时,实际上是在该数组对象上设置一个属性,而不是该数组的一个元素。这意味着使用Array.forEach()时,“关联键”不会被迭代,并且在计算Array.length时不会被包含。如果你想“关联数组”使用下面提到的对象。如果你想看看一个对象是否有属性,请参阅这个答案:http://stackoverflow.com/questions/135448/how-do-i-check-if-an-object-has-a-property-in- javascript – Omn 2015-01-04 03:19:08