繁体   English   中英

如何在ES5中使用计算的属性名称?

[英]How to use a computed property name in ES5?

我想要一个经过计算的属性名称。 我看到您可以在ES6中使用它。 但是它应该与IOS Webview兼容。 所以我不能使用ES6。 而且,如果这会使某人更容易,则计算出的名称在循环内也将始终相同。

有任何想法吗?

var today = moment().format('DD.MM.YY');
for (var i = 0; i < 5; i++) {
    initialData.push(
         {
            dates: {
                "01.01.01": false
                 // instead of 01.01.01 i would like to have the value of today as the key
            }
        }
    )
}

您必须在ES5中精心制作:

var today  = moment().format('DD.MM.YY');
var obj    = {};
obj[today] = false;
for (var i = 0; i < 5; i++) {
  initialData.push({ dates: obj });
}

(或者如果每次迭代都不同,则将obj的创建移入循环内)

如果您碰巧拥有充满ES6 +语法的代码(例如计算所得的属性名称),并且想要使其与ES5兼容,那么到目前为止,最简单的方法是使用Babel这样的编译器为您自动完成 这样一来,您就可以使用该语言的最新版本和最具可读性的代码来编写源代码,同时允许过时的浏览器了解已转译的代码, 不必自己搞乱丑陋的ES5语法。

例如,如果您有想要使ES5兼容的看起来像这样的源代码:

 const prop1 = 'foo'; const prop2 = 'bar'; const prop3 = 'baz'; const obj = { [prop1]: 'val1', [prop2]: 'val2', [prop3]: 'val3', }; console.log(obj); 

您可以通过Babel运行它自动获取ES5版本:

 "use strict"; var _obj; 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 prop1 = "foo"; var prop2 = "bar"; var prop3 = "baz"; var obj = ((_obj = {}), _defineProperty(_obj, prop1, "val1"), _defineProperty(_obj, prop2, "val2"), _defineProperty(_obj, prop3, "val3"), _obj); console.log(obj); 

所转换的代码可能看起来有些丑陋,但是大多数时候,您甚至不需要查看它,只需将其提供给客户端即可使用,即使在Internet Explorer之类的陈旧环境中也可以使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM