为什么可以';如果在JavaScript中使用对另一个对象的调用来构造它,我是否返回一个匿名对象?

为什么可以';如果在JavaScript中使用对另一个对象的调用来构造它,我是否返回一个匿名对象?,javascript,Javascript,这个问题很简单。我有一些假设,为什么这不起作用,但我想要一个更学术的解释 这项工作: newArray = oldArray.map(function(obj){ return {'key': 'value'}; }); 但这并不是: newArray = oldArray.map(function(obj){ return {obj.key: obj.value}; }); 使用ECMA6语法,您可以执行以下操作: newArray = oldArray.map(obj =

这个问题很简单。我有一些假设,为什么这不起作用,但我想要一个更学术的解释

这项工作:

newArray = oldArray.map(function(obj){
    return {'key': 'value'};
});
但这并不是:

newArray = oldArray.map(function(obj){
    return {obj.key: obj.value};
});

使用ECMA6语法,您可以执行以下操作:

newArray = oldArray.map(obj => {
    return {[obj.key]: obj.value};
});
如果要支持较旧的浏览器,则需要创建一个临时对象:

newArray = oldArray.map(function(obj) {
    var newObj = {};
    newObj[obj.key] = obj.value;
    return newObj;
});

使用ECMA6语法,您可以执行以下操作:

newArray = oldArray.map(obj => {
    return {[obj.key]: obj.value};
});
如果要支持较旧的浏览器,则需要创建一个临时对象:

newArray = oldArray.map(function(obj) {
    var newObj = {};
    newObj[obj.key] = obj.value;
    return newObj;
});

你需要通过

newArray = oldArray.map(function(obj){
    var foo = {};
    foo[obj.key] = obj.value;
    return foo;
});

在ES6中,有一种方法可以使用方括号完成您想要的操作。

您需要通过

newArray = oldArray.map(function(obj){
    var foo = {};
    foo[obj.key] = obj.value;
    return foo;
});

在ES6中,有一种方法可以用方括号实现您想要的功能。

好吧,我的第一个想法是,如果没有一些额外的语法,JavaScript如何知道您的意思是将属性命名为“obj.key”,还是根据obj.key中包含的值命名?我找不到一个类似的问题并给出一个好的答案。也许我只是不知道最好的搜索关键词。任何建议@Quentin?@adam0101如果是这样的话,我会立即在新创建的数组中看到这些值。@Half_Duplex-呃…问题顶部黄色大框中的链接?@Half_Duplex,当然你不会看到这些值,因为它的语法无效。我不是说这就是它的工作原理。我是说你想要的东西因为这个不能用。至少,没有ECMA6中提供的附加语法。这是因为
{a:1}
{'a':1}
都是声明对象文字的有效方法。好吧,我的第一个想法是,如果没有一些额外的语法,JavaScript怎么知道您是否希望将属性命名为“obj.key”或者根据obj.key中包含的值命名?我找不到一个类似的问题有一个好的答案。也许我只是不知道最好的搜索关键词。任何建议@Quentin?@adam0101如果是这样的话,我会立即在新创建的数组中看到这些值。@Half_Duplex-呃…问题顶部黄色大框中的链接?@Half_Duplex,当然你不会看到这些值,因为它的语法无效。我不是说这就是它的工作原理。我是说你想要的东西因为这个不能用。至少,没有ECMA6中提供的附加语法。这是因为
{a:1}
{'a':1}
都是声明对象文字的有效方法。