我有一个数组
var assoc_pagine = new Array();
assoc_pagine["home"]=0;
assoc_pagine["about"]=1;
assoc_pagine["work"]=2;
我试过了
if (assoc_pagine[var] != "undefined") {
但它似乎不起作用
我正在使用jquery,我不知道它是否有帮助
谢谢
我有一个数组
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)
或者
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")
更新:正如其他答案所表明的那样,使用数组并不是解决此问题的最佳方法。考虑改用对象。
var assoc_pagine = new Object();
assoc_pagine["home"]=0;
assoc_pagine["about"]=1;
assoc_pagine["work"]=2;
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 是一个声明......所以它是一个保留字......所以只是用另一种方式称呼它。这是一种更好的方法(=== 比 == 更好)
if(typeof array[name] !== 'undefined') {
alert("Has var");
} else {
alert("Doesn't have var");
}
This is not an Array. Better declare it like this:
var assoc_pagine = {};
assoc_pagine["home"]=0;
assoc_pagine["about"]=1;
assoc_pagine["work"]=2;
or
var assoc_pagine = {
home:0,
about:1,
work:2
};
To check if an object contains some label you simply do something like this:
if('work' in assoc_pagine){
// do your thing
};
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 也是您通过调用不以 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();
如果您想使用关联数组,最好使用其他答案推荐的简单对象。
这对我有用
if (assoc_pagine[var] != undefined) {
而是这个
if (assoc_pagine[var] != "undefined") {
if (assoc_pagine.indexOf('home') > -1) {
// we have home element in the assoc_pagine array
}
function isset(key){
ret = false;
array_example.forEach(function(entry) {
if( entry == key ){
ret = true;
}
});
return ret;
}
alert( isset("key_search") );