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

P K*_*P K 4 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
Run Code Online (Sandbox Code Playgroud)

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

And*_*rle 7

来自MDN:

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

编辑:

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

console.log(delete aaaaa);     //true  why not reference error?
Run Code Online (Sandbox Code Playgroud)

所以它一样:

console.log(delete window.aaaaa);     //true  
Run Code Online (Sandbox Code Playgroud)

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

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