Javascript 财产名称丢失?

Javascript 财产名称丢失?,javascript,object,properties,Javascript,Object,Properties,我正在研究一个新兵训练营前的编码问题。我将一个对象(ourDog)和一个键(fiendly)传递到一个函数中,该函数创建一个新属性(key:value对),并为该键赋值true。 查看输出,添加了属性,但该键没有“friendly”的赋值,它的参数名为key。我希望key:value对为(友好:true)。这是代码 var ourDog = { "name": "Camper", "legs": 4, "tails": 1, "friends": ["everything!"]

我正在研究一个新兵训练营前的编码问题。我将一个对象(ourDog)和一个键(fiendly)传递到一个函数中,该函数创建一个新属性(key:value对),并为该键赋值true。 查看输出,添加了属性,但该键没有“friendly”的赋值,它的参数名为key。我希望key:value对为(友好:true)。这是代码

var ourDog = {
  "name": "Camper",
  "legs": 4,
  "tails": 1,
  "friends": ["everything!"]
};


function addProperty(anObject, key) {

  anObject.key = true;

  return anObject;
};


var output = addProperty(ourDog, 'friendly');

console.log(output);
{name: "Camper", legs: 4, tails: 1, friends: Array(1), key: true}

将其从点符号更改为括号

function addProperty(anObject, key) {

  anObject[key] = true;

  return anObject;
};

当对象的属性是有效的JavaScript标识符时,点表示法用于访问该对象的属性。由于“friendly”是一个字符串,您需要使用括号。

更改为
函数addProperty(anObject,key){anObject[key]=true;返回anObject;}传递的是字符串,因此需要使用括号表示法。这有点像你在写
anyObject。“friendly”=true
,当我把它从点符号改为括号符号时,它显然不起作用。非常感谢。现在,我必须考虑为什么会这样。我很高兴这项更改能够起作用。这是因为
key
是一个变量,当你做
anObject.key
时,你说的是用key
'key'
(字符串w/value
'key'
),当你想在
'key'
中存储一个值时,你要么做
anObject.key=value
要么做
anObject.key=value
['key']=value
。但是,您也可以执行
var foo='key'
anObject[foo]=value
,但如果执行了
anObject.foo=value
操作,则将
'foo'
键一起存储
function addProperty(anObject, key) {

  anObject[key] = true;

  return anObject;
};