2012-01-05 53 views
3

爲什麼刪除操作符返回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

因爲它的工作,arr [2000]不再存在。 – zzzzBov 2012-01-05 20:26:34

+0

你是否意味着刪除undefined是真的? arr [2000]未定義 – 2012-01-05 20:27:17

+0

真正的問題是你想要做什麼,這可能是一個典型的XY問題案例。 – 2012-01-05 20:30:16

回答

6

MDN:只有在財產存在,並且不能被刪除

返回false。在所有其他情況下,它 返回true。

編輯:

在這裏你只是刪除在你的範圍,主要是窗口範圍

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

所以它的一樣:

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

這裏arrr是不確定的,在刪除方法被調用之前,您會收到參考錯誤

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

非常好的解釋,謝謝。 – 2012-01-05 20:53:26