为什么 array.indexOf(undefined) 在数组稀疏的情况下不起作用
Why array.indexOf(undefined) doesn't work if array is sparse
我是 JavaScript 的新手,有一件事困扰着我。我有一个非常简单的代码:
var a = [];
a[1] = 1;
i = typeof(a[0]);
index = a.indexOf(undefined);
len = a.length;
console.log(a);
console.log("'n" + len);
console.log("'n" + i);
console.log("'n" + index);
我的问题是:为什么 indexOf 返回 -1,而不是 0。我知道此方法通过===进行比较,但是我使用了未定义的参数关键字。如果我将方法参数更改为"未定义",它也不起作用(但这对我来说很明显)。有人可以解释一下,并告诉在数组中查找未定义值的最简单方法是什么?
这
实际上会在数组中找到一个undefined
值,问题是您的数组a
中没有任何undefined
值,因此它返回 -1 表示它没有找到任何值。您的数组如下所示:
[*uninitialized*, 1]
您在第一个位置没有放置任何东西的事实并不意味着它填充了一个undefined
,它只是没有初始化/不存在。
如果您执行以下操作:
var a = [undefined, 1];
var index = a.indexOf(undefined);
console.log(index);
实际上,它将按预期打印0
。
编辑:要回答有关如何查找未初始化值的问题,请执行以下操作
var a = [];
a[1] = 1;
for(var i = 0; i < a.length; i++){
if(a[i] === undefined){
console.log(i);
}
}
这将打印未初始化数组值的索引。这实际上与indexOf
不同工作的原因是,如果出现以下情况,a[i]
将评估为undefined
:
(1) 元素存在并且其值为 undefined
,或
(2)元素根本不存在。 但是,indexOf
将跳过数组中的这些"间隙"。
一般来说,JavaScript 中的数组是稀疏的——它们可能有漏洞(这就是为什么indexOf()
返回 -1
),因为数组只是从索引到值的映射。您要查找的数组称为密集,如下所示
var a = Array.apply(null, Array(3))
或
var a = Array(undefined, undefined, undefined)
a.indexOf(undefined) //0
请看一下这篇文章,希望对您有所帮助
相关文章:
- 为什么jQuery悬停方法在这种情况下不起作用
- 为什么push方法没有'在这种情况下不起作用:[].推
- 倒计时在某些情况下不起作用
- res.download()在我的情况下不起作用
- 为什么getElementbyId在这种情况下不起作用
- $animate.removeClass 在没有 $evalAsync inside 指令的情况下不起作用
- 为什么 array.indexOf(undefined) 在数组稀疏的情况下不起作用
- 多次点击功能在不重新加载页面的情况下不起作用
- 数据绑定在特定情况下不起作用(AngularJS)
- UI 路由加载微调器在没有$timeout的情况下不起作用
- 为什么原型JavaScript在这种情况下不起作用
- ng-重复运行次数与整数参数一样多在某些情况下不起作用
- AngularJS指令在元素具有绑定值的情况下不起作用
- 为什么隐藏/显示(向上滑动/向下滑动)在这种情况下不起作用
- $('option').mousedown 事件在少数情况下不起作用
- Angular JS自定义指令在没有ng-app指令的情况下不起作用
- Django {{ block.super }} 在特定情况下不起作用
- Ajax 请求在没有警报语句的情况下不起作用
- 替换c#函数bijJquery在不知道如何进行故障排除的情况下不起作用
- clearInterval在特定情况下不起作用(javasripct,jquery)