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; }
请注意,只有返回的值将具有您想要的对象; 原来的对象不会改变。