最近着迷 Javascript 中的对象,回顾以往项目时,记得用到C#里的Dictionary<T, T>时,利用 Microsoft ASP.NET AJAX Client 技术,可以将Dictionary<T, T>直接转为Javascript对象使用,今天突然想到,当Dictionary中的键是int类型时,返回到页面的Javascript对象会是怎样的?这个试验还没来得及做。
在Javascript中,可以利用JSON格式来定义对象,比如
var obj = {
1: "重启",
2: "关机",
3: "开机"
}
alert(obj[2]); // 这句会正常执行
alert(obj.2); // 这句会报错
1: "重启",
2: "关机",
3: "开机"
}
alert(obj[2]); // 这句会正常执行
alert(obj.2); // 这句会报错
我们可以看到,对象名虽然有[_$a-zA-Z][_$a-zA-Z0-9]*的限制,但对于此obj[2],可以正常输出"关机",甚至,我们发现
var obj2 = {
1: "重启",
2: "关机",
3: "开机",
"!": "奇怪的Javascript!"
}
alert(obj2["!"]);
上述也能正常执行。
以前一直以为obj[property] === obj.property,看来错了。
obj.property的写法,仅仅当property为[_$a-zA-Z][_$a-zA-Z0-9]*时才成立。
而用obj[property]的写法,几乎可以支持任意符号。
遇到这点奇怪的,发上来,看看大家是否还可以挖掘一下。