[英]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.