我是
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.如果我将方法参数更改为“undefined”,它也不起作用(对我来说这很明显).有人可以解释一下这个,并且告诉在数组中找到未定义的值的最简单方法是什么?
解决方法
实际上,这将在数组中找到一个未定义的值,问题是数组a中没有任何未定义的值,因此返回-1表示没有找到任何值.你的阵列看起来像:
[*未初始化*,1]
事实上,你没有把任何东西放在第一个位置并不意味着它被填充了一个未定义的,它根本没有初始化/不存在.
如果你这样做:
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不同的原因是,[i]将评估为未定义:
(1)元素存在,值为undefined,或
(2)该元素根本不存在. indexOf然而将跳过阵列中的这些“间隙”.