JavaScript对象 - 键以数字开头,是否允许?

34

这样可以吗?

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

或者键必须以字母开头,如:

myObj = {};
myObj['x4a56546s6d']

我可以混合使用吗:

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

我问这个问题是因为有些东西(例如在HTML中的ID)必须以字母开头。目前我使用的是第三个版本,而fireBug会把以数字开头的键标记为蓝色。


2
如果不允许,你会收到一个错误。 - Felix Kling
4个回答

63

如果使用[string]访问键,则可以使用任何键,甚至带有空格的键。以下所有内容都是有效的:

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

但是,如果你想使用点 . 操作符来访问键,则该键必须是一个有效的标识符,这意味着它们不能以数字开头或包含空格。


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

14
非常生动的例子,点赞。但是孩子们,在家中不要重写 Object.prototype 方法,这太危险了。 - Patrick M

9

0

如果您的键(属性名称)是字符串文字,则其第一个字符可以是数字,这是完全有效的。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接