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

use*_*727 29 javascript arrays jquery key object

这是允许的吗?

myObj = {};
myObj['4a56546s6d']
Run Code Online (Sandbox Code Playgroud)

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

myObj = {};
myObj['x4a56546s6d']
Run Code Online (Sandbox Code Playgroud)

我可以混合两者:

myObj = {};
myObj['x4a56546s6d']
myObj['4a56546s6d']
Run Code Online (Sandbox Code Playgroud)

我问,因为某些事情(例如HTML中的ID)必须以字母开头.我现在有第三个版本,fireBug标记了键(以数字开头)蓝色.

tas*_*oor 54

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

myObj['key with space']
myObj['12345']
Run Code Online (Sandbox Code Playgroud)

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


abu*_*uba 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]"
Run Code Online (Sandbox Code Playgroud)

您可以覆盖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
Run Code Online (Sandbox Code Playgroud)

  • 很有说服力的例子,+ 1.但是孩子们,不要在家里覆盖`Object.prototype`方法.这太危险了. (13认同)

Nie*_*els 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因为不允许使用数字启动标识符.