【问题标题】:String variable value as object key errors on IE11字符串变量值作为 IE11 上的对象键错误
【发布时间】:2016-10-19 19:51:30
【问题描述】:

我在 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,这行得通,但我想知道我的代码引发错误的原因。
  • IE11 支持ES5,但不支持ES6ES7 等新版本。在ES5 中,您不能将变量放在对象的键中。因此,错误。
  • 也许我不明白你要做什么,但为什么不直接做key = String([bar]) 然后使用key?
  • @Ness,这不会有语法错误,但如果你 console.log(foo);你会看到它有一个不应该存在的名为 key 的成员,并且不存在应该存在的名为 b 的成员。

标签: javascript internet-explorer-11


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多