Js对象的属性没有被修改

我有一个函数,它接收一个对象(称为“卡”)。 在这个函数里面,我想改变它的一个属性的值,但是它不会改变。 这里是function:

function replaceImgsUrl(card){ console.log("card: " , card);// prints card: {imgs:[]} card.imgs = "sex"; console.log("new card: " , card); // prints new card: {imgs:[]} return card; } 

顺便说一下,我使用node.js,虽然我不认为这会有所作为。 有没有人有一个想法,为什么会发生这种情况?

我不知道你的card对象是如何定义的,如果它被freezed或者你正在使用某种不可变的库 ,这将阻止你改变属性。
但是,否则它工作正常,你可以看到这里:

  var myCard = { imgs: [] } function replaceImgsUrl(card){ console.log("card: " , card);// prints card: {imgs:[]} card.imgs = "sex"; console.log("new card: " , card); // prints new card: {imgs:[]} return card; } replaceImgsUrl(myCard); 

你的代码似乎与一个实际的对象作为参数,但看起来很奇怪。 为什么要用stringreplace一个types为数组的对象属性?

 function replaceImgsUrl(card){ console.log("card: " , card);// prints card: {imgs:[]} // card.imgs = "sex"; card.imgs.push("sex"); // Isn't it what you'd like to do ? console.log("new card: " , card); // prints new card: {imgs:[]} return card; } replaceImgsUrl({ imgs: [] }); 

看起来card对象被Object.freeze()冻结,或者被configuration为不允许修改对象属性。

如果你真的希望imgs属性从一个数组改变到一个string,那么你可能没有别的办法比创build一个新的对象:

 function replaceImgsUrl(card){ console.log("card: " , card);// prints card: {imgs:[]} card = Object.assign({}, card); // get shallow copy card.imgs = "sex"; console.log("new card: " , card); // prints new card: {imgs:"sex"} return card; } 

请注意,只有返回的值将具有您想要的对象; 原来的对象不会改变。