有效的javascript对象属性名称

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (7)

我试图找出什么被认为是有效的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)

这篇文章详细描述了有效的javascript变量名,' - ^ color'显然无效(作为变量名)。这同样适用于对象属性名称吗?看着上面我试图解决如果

  1. b [' - ^ color']是无效的,但在所有浏览器中都可以用quirk工作,我不应该相信它会继续工作
  2. b [' - ^ color']是完全有效的,但它只是一种只能以这种方式被访问的形式 - (它被支持,所以对象可以被用作地图吗?)
  3. 别的东西

顺便说一句,javascript中的全局变量可能会在顶级声明为

var abc = 0;

但也可以创建(据我了解)

window['abc'] = 0;

以下所有浏览器都适用

window['@£$%'] = "bling!";
alert(window['@£$%']);

这有效吗?这似乎与变量命名规则相矛盾 - 或者我没有在那里声明一个变量?变量和对象属性名称有什么区别?

提问于
用户回答回答于

是的,对象可以用作地图,任何字符串都可以是属性名称。正如您发现的那样,只能使用括号语法来访问某些属性。

window['abc']

正在访问一个属性。它不是一个变量,即使它指的是相同的值(在全球一级):

abc
用户回答回答于

对象属性命名规则和变量命名规则是分开的。该标准仅“reserves”了一些属性名称(如prototypeconstructor,IIRC),但除此之外,任何字符串都会发送。

当然,除了执行环境(即浏览器)决定添加更多的魔法属性。(我听到__proto__以相当奇怪的方式设置了一些事情)

扫码关注云+社区