我正在尝试找出对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
白猪掌柜的
TA贡献1893条经验 获得超10个赞
对象属性命名规则和变量命名规则是分开的。该标准仅“保留”了少数属性名称(例如prototype和constructor,IIRC),但除此之外,任何字符串都可以使用。
当然,除了执行环境(即浏览器)决定添加更多魔术属性时。(我听说设置__proto__以很奇怪的方式破坏了某些东西)
偶然的你
TA贡献1841条经验 获得超3个赞
实际上,每次创建全局变量时,实际上都会创建一个全局对象的新成员(
window
位于浏览器环境,global
Node.js等中)。这就是为什么window.x
是完全一样的喜欢(全球)var x
,this.x
或只x
。像地图一样理解JavaScript 对象是完全正确的,因为:a)您可以随时动态地添加新元素;b)元素可以具有任何名称-还包括特殊字符,c)您可以尝试访问对象/地图中不存在的元素,这不是错误,d)您可以从对象中删除元素。
如果您想使用标准的点符号(例如
a.x
)访问对象成员,则不允许使用不同于_或$的任何特殊字符;名称也不能以数字开头。对于所有其他情况,您不得不使用方括号和引号来访问对象元素。
添加回答
举报
0/150
提交
取消