Javascript 为什么typeof数组[0]==';未定义';不工作?

Javascript 为什么typeof数组[0]==';未定义';不工作?,javascript,undefined,typeof,Javascript,Undefined,Typeof,在对数组执行操作之前,我想检查数组中的下一个元素是否存在,但无法检查它是否未定义。例如: // Variable and array are both undefined alert(typeof var1); // This works alert(typeof arr[1]); // This does nothing var arr = [1,1]; alert(typeof arr[1]); // This works now 它没有做任何事情,因为它失败并出现错误: Refer

在对数组执行操作之前,我想检查数组中的下一个元素是否存在,但无法检查它是否未定义。例如:

// Variable and array are both undefined
alert(typeof var1);   // This works
alert(typeof arr[1]); // This does nothing

var arr = [1,1];
alert(typeof arr[1]); // This works now
它没有做任何事情,因为它失败并出现错误:

ReferenceError: arr is not defined
如果您以这种方式尝试:

var arr = [];
alert(typeof arr[1]);
然后你会得到你想要的。但是,执行此检查的更好方法是使用数组的
.length
属性:

// Instead of this...
if(typeof arr[2] == "undefined") alert("No element with index 2!");

// do this:
if(arr.length <= 2) alert("No element with index 2!");
//而不是这个。。。
if(typeof arr[2]=“undefined”)警报(“没有索引为2的元素!”);
//这样做:
if(arr.length
它没有做任何事情,因为它失败并出现错误:

ReferenceError: arr is not defined
如果您以这种方式尝试:

var arr = [];
alert(typeof arr[1]);
然后您将得到您期望的结果。但是,执行此检查的更好方法是使用数组的
.length
属性:

// Instead of this...
if(typeof arr[2] == "undefined") alert("No element with index 2!");

// do this:
if(arr.length <= 2) alert("No element with index 2!");
//而不是这个。。。
if(typeof arr[2]=“undefined”)警报(“没有索引为2的元素!”);
//执行以下操作:

如果(arr.length处理数组时,在访问数组索引之前,还应检查数组本身

错:

if (arr[0] == ...)
好:


使用数组时,在访问数组索引之前,还应检查数组本身

错:

if (arr[0] == ...)
好:


检查您的控制台是否有错误!检查您的控制台是否有错误!^this。要在非代码的第一行展开:javascript引擎通过
警报(typeof arr
很好,但由于
arr
此时不是数组,所以当您尝试访问其中的元素时,javascript引擎会抛出错误(
[1]
),并停止执行该语句。@joequincy否,它与是否是数组无关:在该点上它是一个引用错误(不是失败的属性查找或其他)。例如(要重新迭代响应示例),在
a={};alert(typeof a[1])
中没有引用错误(因为
a
可以在范围内解决)而
a[1]
将非常高兴地评估为
undefined
。具体来说,
引用错误
是因为在调用
typeof
的逻辑之前,JavaScript试图去引用
arr
以查找
arr[1]
。因为
arr
不存在,所以试图去引用它(这就是
[1]
所做的)失败。@pst是的,它与以下事实有关:
arr
不是一种支持属性查找的变量类型。当然,这种措辞非常麻烦,所以我键入了“array”相反,因为它是与实际情况相关的类型。您会注意到,我从未声明它仅适用于数组。@Amber我更喜欢用另一种方式来看待它:不是强制“取消引用”,而是表达式(
a[1]
中的
a
)未被视为引用类型(只有
1
属性是,但到那时已经太晚了,因为
a
无法评估)^这一点。要在非代码的第一行展开:javascript引擎通过
警报(typeof arr
很好,但因为此时
arr
不是数组,所以当您尝试访问其中的元素(
[1]
)时,javascript引擎会抛出一个错误,并停止执行该语句。@joequincy否,它与是否是数组无关:这是一个引用错误(不是失败的属性查找或其他)。例如(要重新迭代响应示例),在
a={};alert(typeof a[1])
中没有引用错误(因为
a
可以在范围内解决)和
a[1]
将非常高兴地评估为
未定义的
。具体地说:
引用错误
发生是因为在调用
类型的
逻辑之前,JavaScript试图取消引用
arr
以查找
arr[1]
。因为
arr
不存在,所以试图取消引用它(这就是
[1]
does)失败。@pst是的,这与以下事实有关:
arr
不是一种支持属性查找的变量类型。当然,这种措辞非常麻烦,所以我键入了“array”相反,因为它是与实际情况相关的类型。您会注意到,我从未声明它仅适用于数组。@Amber我更喜欢用另一种方式来看待它:不是强制“取消引用”,而是表达式(
a[1]
中的
a
)未被视为引用类型(只有
1
属性是,但到那时已经太迟了,因为
a
无法计算)。。