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对象 - 以数字开头的键,允许吗?的主要内容,如果未能解决你的问题,请参考以下文章
get_json_object() - 在 Impala 中解析 json 字符串 - 无法解析以数字开头的键