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

Posted

技术标签:

【中文标题】Javascript对象 - 以数字开头的键,允许吗?【英文标题】:Javascript Object - Key beginning with number, allowed? 【发布时间】:2012-01-31 16:44:07 【问题描述】:

这是否允许?

myObj = ;
myObj['4a56546s6d']

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

myObj = ;
myObj['x4a56546s6d']

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

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

我这样问是因为某些东西(例如 html 中的 ID)必须以字母开头。我目前有third version 和fireBug 将键(以数字开头)标记为蓝色。

【问题讨论】:

如果不允许,你会得到一个错误。 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

非常说明性的例子,+1。但是孩子们,不要在家中覆盖Object.prototype 方法。太危险了。【参考方案3】:

查看此页面:https://developer.mozilla.org/en/Core_javascript_1.5_Guide/Core_Language_Features#Variables

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

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

以上是关于Javascript对象 - 以数字开头的键,允许吗?的主要内容,如果未能解决你的问题,请参考以下文章

JS以字符串开头的键获取对象的值

get_json_object() - 在 Impala 中解析 json 字符串 - 无法解析以数字开头的键

JavaScript函数

解析:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项

用于聚合键包含数字的键值对的算法

JavaScript - 遍历对象以查找特定的键值