我正在尝试解决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变量名,和“ - ^彩”显然是无效的(作为变量名)。这同样适用于对象属性名称吗?综观上述,我试图找出是否
B [“ - ^色”]是无效的,但怪癖在所有浏览器的工作原理,我不应该相信它的工作向前发展
b [“ - ^色”]是完全有效的,但它只是那种只能以这种方式访问的形式 - (它支持这样的对象可以被用作也许映射?)
东西否则
顺便说一句,在JavaScript中的全局变量可以在顶级声明为
var abc = 0;
,但也可以创建(据我所知)与
window['abc'] = 0;
在以下所有作品上述浏览器
window['@£$%'] = "bling!";
alert(window['@£$%']);
这个有效吗?这似乎与变量命名规则相矛盾 - 或者我没有在那里声明一个变量?变量和对象属性名称有什么区别?
“的对象属性名称可以是任何有效的JavaScript串,或任何可以被转换成一个字符串,包括空字符串。然而,任何属性名不是一个有效的JavaScript标识符(例如,一个包含空格或连字符的属性名称或以数字开头的属性名称)只能使用方括号表示法进行访问。“ ([MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects#Objects_and_properties)) – 2014-02-10 13:51:08
***Márton提出了一个非常重要的观点***当初,可能看起来好像任何JS对象都可以将任何东西视为有效的对象键,但事实并非如此--Márton正确地指出这些属性键实际上已转换为字符串。考虑'var x = new function X(){};','var y = new function Y(){};'和obj = {x:true};''obj [y]'会输出'true',因为'x'和'y'在用作对象键时都被转换为相同的字符串'“[object Object]” – ChaseMoskal 2014-04-01 20:44:58
为了清楚起见,根据我以前的评论的例子,'obj [ x] === obj [y] === obj [“[object Object]”]' – ChaseMoskal 2014-04-01 20:47:00