我想要一个计算属性名称。我看到你可以在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
}
}
)
}
答案 0 :(得分:3)
你必须在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
的创建)
答案 1 :(得分:0)
如果您碰巧具有充满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);
您可以run it through 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之类的陈旧环境中也可以使用。