删除数组的非现有索引元素上的运算符行为?

时间:2012-01-05 20:25:37

标签: javascript arrays

如果我尝试删除数组中不存在的索引元素,为什么delete运算符会返回true?

更准确地说,在javascript中删除undefined是真的吗?

var arr = ['a','b','c','d'];

console.log(delete arr[2000]);  //true why?

console.log(delete aaaaa);     //true  why not reference error?

console.log(delete arrr[2000]);  //reference error  it's okay i think

我不明白第二次和第三次删除之间的区别。两者都应该理想地给出参考错误。

1 个答案:

答案 0 :(得分:7)

来自MDN

  

仅当属性存在且无法删除时才返回false。它   在所有其他情况下都返回true。

编辑:

这里你只删除范围内的a,主要是窗口范围

console.log(delete aaaaa);     //true  why not reference error?

所以它与:

相同
console.log(delete window.aaaaa);     //true  

这里arrr未定义,在调用delete方法之前会出现引用错误

console.log(delete arrr[2000]);  //reference error  it's okay i think