如果我尝试删除数组中不存在的索引元素,为什么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
我不明白第二次和第三次删除之间的区别。两者都应该理想地给出参考错误。
答案 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