字符串变量值作为 IE11 上的对象键错误

String variable value as object key errors on IE11

我在IE11下的一个页面上遇到了一个问题,导致那里的页面崩溃。有问题的代码本质上是从服务器动态获取一个字符串,用它初始化一个变量,然后将它用作对象键。为了让问题更容易理解,我写了一个小脚本:

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

这在 Chrome、FireFox 和 Microsoft Edge 下都有效,但在 IE11 下,我收到以下错误:

Expected identifier, string or number

为什么 IE11 不允许这个,我应该如何解决这个问题?

IE11 很旧,不支持该语法...ES2015+ 中的语法更改并不总是很容易在旧浏览器中实现 - 尽管您可以这样做

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

然而,使用 babel,代码转换为 (ES2015-loose preset)

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");

此语法称为 Computed property names