2011-03-15 27 views
17

我試圖使用「for」作爲對象屬性名稱。它似乎在IE7,IE8,Firefox,Chrome和Opera中運行良好,但顯然不在Safari中。瀏覽器支持在JavaScript中使用保留字作爲屬性名稱

我的理解是,ECMAScript 5允許它(如JavaScript keywords in hash keys中所述)。

我可以得到一個支持/不支持這個地方的瀏覽器的權威列表嗎?

編輯:其實,CoffeeScript的保留字屬性名稱的自動字符串是什麼讓我相信它的作品。正確地重新測試後,它似乎不能在任何地方工作,所以現在的問題是:是否有按照ECMAScript 5規範允許的瀏覽器?

+9

豈不是更容易更改的屬性名稱? – jondavidjohn

+11

我認爲假設我知道重命名該房產的可能性是安全的。有時候人們只是好奇,你知道。 –

回答

21

沒有爲的ECMAScript 5功能,這裏一個表,示瀏覽器支持:http://kangax.github.com/es5-compat-table/

保留字可以被用作IE9,火狐3.5及以上版本和Chrome 7 +,Safari瀏覽器5.1+屬性名稱。

15

您可以使用這些詞,但只能用作字符串而不能用於速記屬性。

foo['class']; // cool 
foo.class; // not cool 

但是,這裏是您要求的實際列表。這些都不能通過屬性點語法來使用。 https://web.archive.org/web/20140902235313/http://javascript.about.com/library/blreserved.htm


而且,只是稍微切,CoffeeScript中注意到了這種和經銷商stringifies它們。 http://jashkenas.github.com/coffee-script/#literals

輸入:

$('.account').attr class: 'active' 
log object.class 

JS Ouptput:

$('.account').attr({ 
    "class": 'active' 
}); 
log(object["class"]); 

我忽然想到,這是非常宕整潔。

+0

我實際上試圖找出哪些瀏覽器允許使用保留字作爲屬性名稱(如果有的話)。有沒有列表?然而,+1提到CoffeeScript。自動字符串化是使我相信它在大多數瀏覽器中都能正常工作的原因。 –

+0

當腳本拋出JavaException時,Mozilla Rhino JavaScript引擎的非JSR223實現會執行此操作。如果您需要執行特殊邏輯來處理它,您需要檢查exception.javaException [「class」]。name以查看它是否與您正在查找的特定異常的Java類名相匹配。 – sworisbreathing

+2

'這些都不能通過屬性點語法來使用.'它們可以在ES6中使用。在'Promise'對象中使用'catch'關鍵字作爲函數名稱。 –

-3

經過研究,我想我可以證明,使用保留字作爲屬性名稱(如果以一點常識完成的話)是無害的,無論是在obj['name']還是obj.name語法中。

看到this stackoverflow question

+3

不正確。在IE8中,'''SomeClass.delete = function()''會導致腳本錯誤被拋出。 –

+0

要走的路!雖然同意不推薦,那是行爲標準嗎?沒有使用,即在年和年,因此不熟悉樹林的脖子。 –

+1

IE9和後來似乎正確讓你使用關鍵字作爲屬性,所以我認爲這陷入了「該死的你IE7/8」陣營的問題。 –

4

也許這個問題是沒有這麼多的保留字是否可以作爲對象的屬性名稱 - 他們可以。似乎這裏真正的問題是它們是否可以裸露使用(即不穿衣服)。保留字的裸體使用是從ES5開始支持的,但並非所有的解釋器都支持ES5功能。如前所述,這裏有一個很好的表...

http://kangax.github.io/es5-compat-table/#Reserved%20words%20as%20property%20names

如果你只是在做一些的NodeJS編碼,那麼你不必擔心此類問題。如果您關心代碼在各種環境中的可移植性(不使用JavaScript編譯爲JavaScript的語言),那麼您的代碼應引用保留字...

定義...

var foo = {'for':'this works'}; 

訪問...

foo ['for']; 
+0

最佳答案imho。 –

相關問題