首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有效的javascript对象属性名称

有效的javascript对象属性名称
EN

Stack Overflow用户
提问于 2010-05-31 05:33:07
回答 3查看 59.6K关注 0票数 77

我正在尝试找出对于javascript对象的属性名来说什么是有效的。例如

代码语言: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‘-^

  • ’是无效的,但通过怪癖在所有浏览器中都可以工作,我不应该相信它会工作,因为它是完全有效的,但它只是一种只能以这种方式访问的形式-(它是受支持的,因此对象可以用作perhaps?)

  • Something

顺便说一句,javascript中的全局变量可以在顶层声明为

代码语言:javascript
复制
var abc = 0;

但也可以创建(据我所理解的)

代码语言:javascript
复制
window['abc'] = 0;

下面的代码可以在上述所有浏览器中运行

代码语言:javascript
复制
window['@£$%'] = "bling!";
alert(window['@£$%']);

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-05-31 05:34:33

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

代码语言:javascript
复制
window['abc']

正在访问一个属性。它不是一个变量,即使它引用的值(在全局级别)与:

代码语言:javascript
复制
abc
票数 72
EN

Stack Overflow用户

发布于 2010-05-31 05:40:15

对象属性命名规则和变量命名规则是分开的。该标准只“保留”一小部分属性名称(如prototypeconstructor,IIRC),但除此之外,任何字符串都可以保留。

当然,除非执行环境(即浏览器)决定添加更多的魔术属性。(我听说设置__proto__以一种非常奇怪的方式破坏了一些东西)

票数 15
EN

Stack Overflow用户

发布于 2011-08-28 04:39:21

  1. 每次创建全局变量时,实际上都会创建一个全局对象的新成员(在浏览器环境中为window,在Node.js中为global,等等)。这就是为什么window.x完全像(全局) var xthis.x或者只是像地图一样的x.
  2. Understanding JavaScript 对象是非常正确的,因为: a)你可以动态添加一个新元素-在任何时刻;b)元素可以有任何名称-也包括特殊字符,c)你可以尝试访问一个对象/地图的不存在的元素,这不是一个错误,d)你可以从一个对象中删除一个元素。
  3. 如果您想使用标准的点表示法访问对象成员(例如,a.x)不允许使用除_或$以外的任何特殊字符;并且名称不能以数字开头。对于所有其他情况,您必须使用方括号和引号来访问对象元素。
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2940424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档