首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >检查JS中是否设置了数组项

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

Stack Overflow用户
提问于 2010-04-10 19:29:39
回答 7查看 110.8K关注 0票数 34

我有一个数组

代码语言:javascript
复制
    var assoc_pagine = new Array();
    assoc_pagine["home"]=0;
    assoc_pagine["about"]=1;
    assoc_pagine["work"]=2;

我试过了

代码语言:javascript
复制
    if (assoc_pagine[var] != "undefined") {

但它似乎不起作用

我正在使用jquery,我不知道它是否有帮助

谢谢

EN

回答 7

Stack Overflow用户

发布于 2010-04-10 19:39:48

var是一个声明...所以这是一个保留字。所以换一种方式就行了。这是一个更好的方法(===比==更好)

代码语言:javascript
复制
if(typeof array[name] !== 'undefined') {
    alert("Has var");
} else {
    alert("Doesn't have var");
}
票数 9
EN

Stack Overflow用户

发布于 2010-04-10 23:07:39

这不是数组。最好这样声明它:

代码语言:javascript
复制
var assoc_pagine = {};
assoc_pagine["home"]=0;
assoc_pagine["about"]=1;
assoc_pagine["work"]=2;

代码语言:javascript
复制
var assoc_pagine = {
                 home:0,
                 about:1,
                 work:2
               };

要检查对象是否包含某个标签,只需执行以下操作:

代码语言:javascript
复制
if('work' in assoc_pagine){
   // do your thing
};
票数 3
EN

Stack Overflow用户

发布于 2015-01-04 14:49:17

TLDR;我能想到的最好的方法是:(根据您的用例,有许多方法可以优化这个函数。)

代码语言:javascript
复制
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,每个注释都表示它前面的行的评估值。);

代码语言:javascript
复制
var foo = new Array();
foo;
//[]
foo.length;
//0
foo['bar'] = 'bar';
//"bar"
foo;
//[]
foo.length;
//0
foo.bar;
//"bar"

这表明关联键不是用于访问数组中的元素,而是用于对象的属性。

代码语言:javascript
复制
foo[0] = 0;
//0
foo;
//[0]
foo.length;
//1
foo[2] = undefined
//undefined
typeof foo[2]
//"undefined"
foo.length
//3

这表明检查typeof不允许您查看元素是否已设置。

代码语言:javascript
复制
var foo = new Array();
//undefined
foo;
//[]
foo[0] = 0;
//0
foo['0']
//0
foo[' 0']
//undefined

这显示了我上面提到的异常,以及为什么不能只使用parseInt();

如果你想使用关联数组,你最好使用简单的对象,正如其他答案所建议的那样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2613192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档