Javascript对象 – 以数字开头的键,允许?

这是允许的吗?

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

或者密钥必须以如下字母开头:

 myObj = {}; myObj['x4a56546s6d'] 

我可以混合两者:

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

我问这是因为某些事情(例如HTML中的ID)必须以字母开头。 我现在有第三个版本 ,fireBug标记了键(以数字开头)蓝色。

如果使用[string]访问密钥,甚至可以使用空格键,则可以使用任何密钥。 所有这些都是有效的:

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

但是如果你想使用点. 操作员访问密钥然后密钥必须是有效的标识符,这意味着他们不能以数字或包含空格开头。

通过点运算符,您可以访问键中的值,这些键不包含空格或特殊字符,从数字开始的单词(即那些不能用作变量名称的单词),否则您可以像关联数组中的键。

你可以使用你想要的所有键作为键,但记住键将是你输入的字符串表示。澄清 – 将被称为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 

请参阅此页: https : //developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Variables

JavaScript标识符必须以字母,下划线(_)或美元符号($)开头; 后续字符也可以是数字(0-9)。 因为JavaScript区分大小写,所以字母包括字符“A”到“Z”(大写)和字符“a”到“z”(小写)。

您可以这样使用它,但是您将无法使用myObj.4a56546s6d访问数据,因为不允许使用myObj.4a56546s6d启动标识符。

如果您的密钥(属性名称)是字符串文字,那么将数字作为其第一个字符是完全有效的。

有关JS中有效键的更多信息,请参阅此问题的答案。