Internet Explorer 7中索引名称中的点不能工作

Dots in index names in Internet Explorer 7 does not work

本文关键字:不能 工作 Explorer 索引 Internet      更新时间:2023-09-26

例如属性("stem.secid")在ie7浏览器中显示为properties.stem.secid并因此不能工作。

这个问题有解决方案或变通方法吗?

我想你可能搞错了。至少,这不是IE9的工作方式:

>> var x = { foo : { bar : 'hello' } }; 
>> x.foo.bar 
"hello" 
>> x['foo.bar'] 
undefined

或者更明确地:

>> var x = {
    foo : {
        bar : 'hello'
    },
    'foo.bar' : 'goodbye'
}; 
>> x['foo.bar'] 
"goodbye"

这不是真的。点在属性名中是完全有效的(实际上任何字符串都可以用作属性名),并且在IE 7中被正确处理。以下内容在所有浏览器中都能正常工作:

var o = {};
o['stem.secid'] = "foo";
alert(o.stem); // undefined
alert(o['stem.secid']); // foo

这是设计。为什么这对你想要的不起作用?

Javascript允许通过括号字符串表示法或点表示法来标识属性。这允许以下内容是等价的:

my.obj.stem.secid = value
my['obj']['stem']['secid'] = value

但这允许我们通过指定键来编程地选择特定的元素,如下所示:

var key1 = 'obj';
var key2 = 'stem';
var key3 = 'secid';
my[key1][key2][key3] = value
//or alternately just in parts:
my[key1].stem[key3] = value

,但注意,这将不同于如果我们这样做

var key1 = 'obj';
var key2 = 'stem';
var key3 = 'secid';
my.key1.key2.key3 = value

这就是为什么你会使用括号字符串作为段标识符。