2012-01-02 54 views
25

這是允許的嗎?JavaScript對象 - 以數字開頭的關鍵字,允許?

myObj = {}; 
myObj['4a56546s6d'] 

或密鑰必須與像一個字母開頭:

myObj = {}; 
myObj['x4a56546s6d'] 

我可以混合使用這兩個名字:

myObj = {}; 
myObj['x4a56546s6d'] 
myObj['4a56546s6d'] 

我問,因爲有些事情(例如HTML中的ID)必須以字母開頭。我現在有third version和fireBug標記鍵(以數字開頭)藍色。

+2

如果不允許,你會得到一個錯誤。 – 2012-01-02 08:38:37

回答

47

如果您使用[string]來訪問密鑰,甚至可以使用空格鍵,則可以使用任何密鑰。所有這些都是有效的:

myObj['key with space'] 
myObj['12345'] 

但是,如果你想用點.操作者進入鍵,則密鑰必須是有效的標識符,這意味着他們不能以數字開頭或包含空格。

6

看到這個頁面:https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Variables

一個JavaScript標識符必須以字母,下劃線(_)或美元符號($);後續字符也可以是數字(0-9)。由於JavaScript區分大小寫,所以字母包括字符「A」到「Z」(大寫)以及字符「a」到「z」(小寫)。

您可以這樣使用它,但是您將無法使用myObj.4a56546s6d訪問數據,因爲不允許用數字開頭標識符。

0

如果你的鍵(屬性名)是一個字符串字面值,那麼將一個數字作爲其第一個字符是完全有效的。

查看this的問題獲得更多關於JS有效密鑰的信息。

16

通過點運算符,您可以訪問不包含空格或特殊字符,從數字開始的單詞(即不能用作例如變量名稱的單詞)的鍵的值,否則您可以獲得任何重試他們喜歡作爲關聯數組中的鍵。

你可以使用任何你想要的鍵,但記住鍵是你放入的字符串表示。澄清 - 將被稱爲toString()。

看:

var myObj = {}; 

myObj[ 3 ] = "key is 3"; 
alert(myObj[ "3" ]); //alerts "key is 3" because (3).toString() is "3" 
//but an error will thrown when accessing by myObj.3 

myObj[ {} ] = "key is {}" 
alert(myObj["[object Object]"]) // alerts "key is {}" because ({}).toString() is "[object Object]" 

您可以覆蓋toString()方法,如:

Object.prototype.toString = function(){ return "object"} 

a = {}; 
a[ {} ] = "whatever"; 
alert(a["object"]); // alerts "whatever" because as now toString() returns "object" from each created object 
+12

非常具有說明性的示例,+1。但孩子們,不要在家重寫'Object.prototype'方法。這太危險了。 – 2012-12-05 15:28:09

相關問題