我正在尝试找出对于javascript对象的属性名来说什么是有效的。例如
var b = {}
b['-^colour'] = "blue"; // Works fine in Firefox, Chrome, Safari
b['colour'] = "green"; // Ditto
alert(b['-^colour']); // Ditto
alert(b.colour); // Ditto
for(prop in b) alert(prop); // Ditto
//alert(b.-^colour); // Fails (expected)
此post详细说明了有效的javascript变量名,而'-^colour‘显然是无效的(作为变量名)。这是否同样适用于对象属性名称?看着上面的内容,我想知道如果
颜色b‘-^
顺便说一句,javascript中的全局变量可以在顶层声明为
var abc = 0;
但也可以创建(据我所理解的)
window['abc'] = 0;
下面的代码可以在上述所有浏览器中运行
window['@£$%'] = "bling!";
alert(window['@£$%']);
这是有效的吗?这似乎与变量命名规则相矛盾--或者我没有在那里声明一个变量?变量和对象属性名有什么区别?
发布于 2010-05-31 05:34:33
是的,对象可以用作映射,任何字符串都可以是属性名称。正如您已经发现的,某些属性只能使用括号语法来访问。
window['abc']
正在访问一个属性。它不是一个变量,即使它引用的值(在全局级别)与:
abc
发布于 2010-05-31 05:40:15
对象属性命名规则和变量命名规则是分开的。该标准只“保留”一小部分属性名称(如prototype
和constructor
,IIRC),但除此之外,任何字符串都可以保留。
当然,除非执行环境(即浏览器)决定添加更多的魔术属性。(我听说设置__proto__
以一种非常奇怪的方式破坏了一些东西)
发布于 2011-08-28 04:39:21
window
,在Node.js中为global
,等等)。这就是为什么window.x
完全像(全局) var x
,this.x
或者只是像地图一样的x
.a.x
)不允许使用除_或$以外的任何特殊字符;并且名称不能以数字开头。对于所有其他情况,您必须使用方括号和引号来访问对象元素。https://stackoverflow.com/questions/2940424
复制相似问题