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
无法计算)。。