2013-05-06 100 views
20

,如果我有一個變量在JavaScript中會發生什麼,說:在JavaScript中,如果「刪除」一個不存在的屬性會發生什麼?

var exampleObject = {one:'foo',two:'bar'}; 

,然後我刪除不存在的屬性,一拉:

delete exampleObject.seven; 

是否有動作的標準課程(無,錯誤消息,腳本崩潰等),還是依賴某種實現(瀏覽器引擎等)?

+6

難道很難測試? – Joseph 2013-05-06 20:31:40

+10

對於我而言,發生的事情是否依賴於所有語言實現的環境或標準並不明顯。 – thisissami 2013-05-06 20:33:12

+3

世界以神的眼淚爆炸結束 – 2013-05-06 20:34:05

回答

18

沒有任何反應。

假設,x = {}Type(x.y)一個Reference Specifcation Type(不可能有一個「參考」來表示不存在的屬性)。根據11.4.1 The delete Operator,這滿足了規則:

  1. 讓裁判是評估UnaryExpression的結果。
  2. 如果Type(ref)不是Reference,則返回true。
  3. ...

這種行爲(的「不採取行動」)已經存在了很長一段時間 - 即不同的行爲是不符合任何環境。從3rd Edition ECMAScript Specification

當[刪除]] O的方法被調用屬性名稱P,採取以下步驟:

  1. 如果o不具有名稱的屬性P,返回true。
  2. ...
+0

我會*真的很喜歡*我的斷言反饋Type(xy)不會導致參考規範類型;重新閱讀規範似乎暗示它將是'IsUnresolvableReference'(??);在這種情況下,爲什麼FF/Chrome在使用strict時拋出SyntaxError? – user2246674 2013-05-06 20:58:21

+0

你的回答是對的。 「IsUnresolvableReference(V)。如果基本值未定義,則返回true,否則返回false。」 - 「Base value」在你的例子中是'x',而不是'y'。 – 2013-05-06 21:03:59

+0

@DaggNabbit謝謝,這就是我的想法,但後來我最終與ReferenceErrors或TypeErrors而不是一個SyntaxError; (function(){「use strict」; delete dne.y;})();'(ReferenceError),'(function(){「use strict」; var x = undefined; delete xy;})(); '(TypeError) – user2246674 2013-05-06 21:05:04

9

如果exam​​pleObject是一個對象,則從delete返回的值爲true,即使該屬性不存在。

相關問題