2012-09-27 29 views
0

根據這一頁https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Reserved_Words允許/建議的屬性名稱的JavaScript

不能使用這些保留字作爲變量,但是你可以用它們apperantly這樣:

var test = { 
    break : 'whatever', 
    case : 'whatever', 
    if : 'whatever', 
    in : 'whatever' 
    //etc 
}; 

我在這裏有一個撥弄着所有的值http://jsfiddle.net/9RQ9j/4/

而且我沒有得到任何錯誤,要麼將它們定義或調用例如像這樣

console.log(test.if) 

對我來說這似乎是可能的,但它是否與JavaScript規範衝突?那麼至少就像我測試過的所有瀏覽器(其中大多數)都違反規範並允許您使用這些詞。

(更新:似乎在IE 8 +其他可能的IE瀏覽器的失敗)

而且,廣告是好的做法呢?

最後一個問題:這可以嗎?

var test = { 
    'break' : 'whatever', 
    'case' : 'whatever', 
    'if' : 'whatever', 
    'in' : 'whatever' 
}; 
+4

您鏈接的頁面可以回答問題。請參閱底部的*保留字使用*部分。 – Quentin

+0

是的,我以某種方式設法忽略了這一點。但是,像這樣使用任何保留字都會在我現在測試的IE8中觸發錯誤。也許在其他IE中也是如此。所以我假設你應該var test = {'if':'whatever'}是安全的跨瀏覽器。但即使在定義它之後,你不能調用test.if,你需要做IE8中的測試['if'] –

回答

2

根據ES5 Spec,對象屬性是IdentifierNames,而不是標識符,這意味着它們不排除保留字。

是不是很好的做法?可能不是一般的,但如果它使你的代碼更清晰,那麼是的。

是的,使用帶引號的字符串引用屬性等同於使用相同的未加引號的符號引用它們 - 但是可以使用帶引號的標識符集顯然比可以使用未引用的標識符集更大。

-1

測試此:

console.log(test['if']); 

在JS,陣列是對象,所以兩種語法是好的。

+2

這並不能回答這個問題。 – Quentin