在IE11中将字符串变量作为对象键值会出错。

3

我在IE11浏览器下遇到了一个问题,导致页面崩溃。问题代码从服务器动态获取一个字符串,将其初始化为变量,并稍后将其用作对象键。为了让问题更容易理解,我编写了一个小脚本:

var bar = "b";
var foo = {[bar]: "Orson oson a borsos borsós fosos koros boros korsón"};

这在Chrome、FireFox和Microsoft Edge中都有效,但在IE11下会出现以下错误:

预期的标识符、字符串或数字

为什么IE11不允许这样做?我该如何解决?


也许这段代码与 ES6ES7 有关。尝试 var bar = "b", foo = {}; foo[bar] = "Orson oson a borsos borsós fosos koros boros korsón"; - Mr_Green
@Mr_Green,那个可以用,但我想知道为什么我的代码会抛出错误。 - Lajos Arpad
1
IE11支持ES5,但不支持像ES6ES7这样的新版本。在ES5中,您无法将变量放置在对象键中。因此出现了错误。 - Mr_Green
也许我不理解你想做什么,但为什么不只是这样做key = String([bar]),然后使用key呢? - Ronen Ness
@Ness,你能给我展示一下你正在考虑的脚本吗? - Lajos Arpad
1
@Ness,这段代码没有语法错误,但是如果你console.log(foo);,你会发现它有一个名为key的成员,而实际上不应该存在这个成员,同时也缺少了一个名为b的成员。 - Lajos Arpad
1个回答

8

IE11已经过时了,不支持那种语法...在ES2015+中的句法变化并不总是容易在老旧的浏览器上实现——但是有了这个,你就可以做到。

var bar = "b";
var foo = {};
foo[bar] = "Orson oson a borsos borsós fosos koros boros korsón";

使用Babel,然而代码被翻译成了(ES2015-loose预设)。
var _foo;

var bar = "b";
var foo = (_foo = {}, _foo[bar] = "Orson oson a borsos borsós fosos koros boros korsón", _foo);

或者(ES2015预设)
function _defineProperty(obj, key, value) { 
    if (key in obj) { 
        Object.defineProperty(obj, key, { 
            value: value, 
            enumerable: true, 
            configurable: true, 
            writable: true 
        }); 
    } else { 
        obj[key] = value; 
    } 
    return obj; 
}

var bar = "b";
var foo = _defineProperty({}, bar, "Orson oson a borsos borsós fosos koros boros korsón");

这个语法被称为计算的属性名


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接