为了账号安全,请及时绑定邮箱和手机立即绑定

有效的javascript对象属性名称

有效的javascript对象属性名称

蛊毒传说 2019-10-11 10:20:15
我正在尝试找出对javascript对象的属性名称有效的内容。例如var b = {}b['-^colour'] = "blue";     // Works fine in Firefox, Chrome, Safarib['colour'] = "green";      // Dittoalert(b['-^colour']);       // Dittoalert(b.colour);            // Dittofor(prop in b) alert(prop); // Ditto//alert(b.-^colour);     // Fails (expected)这篇文章详细介绍了有效的javascript变量名,“-^ colour”显然无效(作为变量名)。对象属性名称是否也一样?综上所述,我正在尝试确定b ['-^ colour']无效,但是在所有浏览器中都存在古怪的现象,我不应该相信它会继续向前发展b ['-^ colour']是完全有效的,但是它的形式只能以这种方式访问-(受支持,因此对象也许可以用作地图?)还有别的顺便说一句,在javascript中的全局变量可能在顶层声明为var abc = 0;但也可以(据我所知)与window['abc'] = 0;以下适用于所有上述浏览器window['@£$%'] = "bling!";alert(window['@£$%']);这有效吗?似乎与变量命名规则相矛盾-还是我不在那里声明变量?变量和对象属性名称之间有什么区别?
查看完整描述

3 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

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


window['abc']

正在访问属性。尽管它引用的值与全局值相同,但它不是变量:


abc


查看完整回答
反对 回复 2019-10-11
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

对象属性命名规则和变量命名规则是分开的。该标准仅“保留”了少数属性名称(例如prototype和constructor,IIRC),但除此之外,任何字符串都可以使用。


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


查看完整回答
反对 回复 2019-10-11
?
偶然的你

TA贡献1841条经验 获得超3个赞

  1. 实际上,每次创建全局变量时,实际上都会创建一个全局对象的新成员(window位于浏览器环境,globalNode.js等中)。这就是为什么window.x是完全一样的喜欢(全球)var xthis.x或只x

  2. 像地图一样理解JavaScript 对象是完全正确的,因为:a)您可以随时动态地添加新元素;b)元素可以具有任何名称-还包括特殊字符,c)您可以尝试访问对象/地图中不存在的元素,这不是错误,d)您可以从对象中删除元素。

  3. 如果您想使用标准的点符号(例如a.x)访问对象成员,则不允许使用不同于_或$的任何特殊字符;名称也不能以数字开头。对于所有其他情况,您不得不使用方括号和引号来访问对象元素。


查看完整回答
反对 回复 2019-10-11
  • 3 回答
  • 0 关注
  • 407 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信