use*_*172 6 javascript ecmascript-5
我想要一个经过计算的属性名称。我看到您可以在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
}
}
)
}
Run Code Online (Sandbox Code Playgroud)
如果您碰巧拥有完整的 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 Code Online (Sandbox Code Playgroud)
你可以通过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);Run Code Online (Sandbox Code Playgroud)
转译的代码可能看起来有点难看,但大多数时候,您甚至不需要查看它,只需将其提供给客户端,它就会工作,即使在 Internet Explorer 等过时的环境中也是如此。
你必须在 ES5 中以复杂的方式来完成它:
var today = moment().format('DD.MM.YY');
var obj = {};
obj[today] = false;
for (var i = 0; i < 5; i++) {
initialData.push({ dates: obj });
}
Run Code Online (Sandbox Code Playgroud)
(或者如果每次迭代都不同,则将 的创建移到obj循环内部)
| 归档时间: |
|
| 查看次数: |
1325 次 |
| 最近记录: |