错误地返回一个对象?

Eri*_*rez 2 javascript ecmascript-6

我有一个看起来像这样的以下函数:

    function addProperty(object, property) {

}
Run Code Online (Sandbox Code Playgroud)

我必须将property参数的值添加为object参数的键.必须将new属性的值设置为null.之后,我将返回带有新添加属性的对象.预期的输入是这样的:{ x: 5 }, 'y'左边的对象和右边的属性.预期的产出是这样的:{ x: 5, y: null }.

这是我到目前为止:

function addProperty(object, property) {
   object = { object, [property]: null};
  return object;
}

addProperty({x:5}, 'y');
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出:{ object: { x: 5 }, y: null }.我在这做错了什么?我如何摆脱输出开头看起来像对象属性的东西,并留下对象本身和属性??.

Ori*_*ori 7

使用Object#assign通过new属性创建基于原始对象的新对象:

function addProperty(object, property) {
   return Object.assign({}, object, { [property]: null });
}

console.log(addProperty({x:5}, 'y'));
Run Code Online (Sandbox Code Playgroud)

或者使用Object Rest/Spread提案(需要Babel和转换):

function addProperty(object, property) {
  return { ...object, [property]: null };
}

console.log(addProperty({x:5}, 'y'));
Run Code Online (Sandbox Code Playgroud)

您的代码有什么问题:

在编写时{ object },您使用ES6速记属性名称创建一个新对象文字,其具有属性"object",具有旧对象的值.你有效地写作:

object = { object: object }
Run Code Online (Sandbox Code Playgroud)

function addProperty(object, property) {
  object = { // assign a new object literal to the object variable
    object, // add a new property by name of "object" with the contents of the original object
    [property]: null
  };
  return object;
}

console.log(addProperty({x:5}, 'y'));
Run Code Online (Sandbox Code Playgroud)