如何在 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);
可以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 这样的过时环境中也是如此。
我想要一个经过计算的 属性 名称。我看到你可以在 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);
可以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 这样的过时环境中也是如此。