我有一个数组
var assoc_pagine = new Array();
assoc_pagine["home"]=0;
assoc_pagine["about"]=1;
assoc_pagine["work"]=2;
我试过了
if (assoc_pagine[var] != "undefined") {
但它似乎不起作用
我正在使用jquery,我不知道它是否有帮助
谢谢
发布于 2010-04-10 19:39:48
var是一个声明...所以这是一个保留字。所以换一种方式就行了。这是一个更好的方法(===比==更好)
if(typeof array[name] !== 'undefined') {
alert("Has var");
} else {
alert("Doesn't have var");
}
发布于 2010-04-10 23:07:39
这不是数组。最好这样声明它:
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
};
发布于 2015-01-04 14:49:17
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‘这样的字符串不会。)
此外,检查不存在的数组元素或对象属性确实会评估为未定义,但这实际上并不能告诉您尚未设置数组元素或对象属性。例如,undefined也是通过调用不以返回语句终止的函数而得到的结果。这可能会导致一些奇怪的错误和调试代码的困难。
这可能会让人感到困惑,但使用浏览器的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();
如果你想使用关联数组,你最好使用简单的对象,正如其他答案所建议的那样。
https://stackoverflow.com/questions/2613192
复制相似问题