这是允许的吗?
myObj = {};
myObj['4a56546s6d']
或者密钥必须以以下字母开头:
myObj = {};
myObj['x4a56546s6d']
我可以将两者混合使用:
myObj = {};
myObj['x4a56546s6d']
myObj['4a56546s6d']
我问这是因为某些事情(例如HTML中的ID)必须以字母开头。我现在有third version和fireBug标记键(以数字开头)蓝色。
答案 0 :(得分:53)
如果您使用[string]
来访问密钥,即使是空格密钥,也可以使用任何密钥。所有这些都是有效的:
myObj['key with space']
myObj['12345']
但是如果你想使用点.
运算符来访问密钥,那么密钥必须是有效的标识符,这意味着它们不能以数字开头或包含空格。
答案 1 :(得分:18)
通过点运算符,您可以访问来自键的值,这些键不包含空格或特殊字符,从数字开始的单词(即那些不能用作变量名称的单词),否则您可以获得任何重复它们就像关联数组中的键一样。
你可以使用你想要的所有键作为键,但记住键将是你输入内容的字符串表示。澄清 - 将被称为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
答案 2 :(得分:7)
请参阅此页:https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Variables
JavaScript标识符必须以字母,下划线(_)或美元符号($)开头;后续字符也可以是数字(0-9)。由于JavaScript区分大小写,因此字母包括字符“A”到“Z”(大写)和字符“a”到“z”(小写)。
您可以这样使用它,但是您无法使用myObj.4a56546s6d
访问数据,因为不允许使用数字启动标识符。
答案 3 :(得分:0)
如果您的密钥(属性名称)是字符串文字,那么将数字作为其第一个字符是完全有效的。
有关JS中有效密钥的更多信息,请参阅this问题的答案。