Javascript 对象 - 键以数字开头,允许吗?

新手上路,请多包涵

这是允许的吗?

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

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

 myObj = {};
myObj['x4a56546s6d']

我可以像这样混合两者吗:

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

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

原文由 user970727 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 979
2 个回答

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

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

但是,如果您想使用点 . 运算符来访问密钥,则密钥必须是有效的标识符,这意味着它们不能以数字开头或包含空格。

原文由 taskinoor 发布,翻译遵循 CC BY-SA 3.0 许可协议

通过点运算符,您可以从不包含空格或特殊字符的键访问值,以数字开头的单词(即不能用作变量名的单词),否则您可以获得对它们的任何引用,例如关联数组中的键。

您可以将任何内容用作键,但请记住,键将是您输入内容的字符串表示形式。澄清 - 将调用 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

原文由 abuduba 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题