var collection = {
2548: {
album: "Slippery When Wet",
artist: "Bon Jovi",
tracks: [
"Let It Rock",
"You Give Love a Bad Name"
]
},
2468: {
album: "1999",
artist: "Prince",
tracks: [
"1999",
"Little Red Corvette"
]
},
1245: {
artist: "Robert Palmer",
tracks: [ ]
},
5439: {
album: "ABBA Gold"
}
};
// Keep a copy of the collection for tests
var collectionCopy = JSON.parse(JSON.stringify(collection));
function update(id, prop, value) {
if(prop !== "tracks" && value !== null){
collection[id][prop] = value;
}else if(prop === "tracks" && value !== null){
collection[id][prop].push(value);
}else if(value === null){
delete collection[id]['artist']; //问题在这里!!
}
return collection;
}
console.log(update(5439, "artist", ""));如果我传的第三个参数value为空的话,删除artist这个属性,为什么我这样删除不了??
4 回答
已采纳
Suber丶林
TA贡献75条经验 获得超180个赞
你第三个if里面的判断是value === null,而你传的是控制符串"",那么你使用的三个等号,也就是“全等于”,那么很明显null !== "",所以你进入的是第一个if。
修改如下:
① 把你43行传入的空字符串换成null,即update(5439, "artist", null));
② 把你35行的 else if (value === null)换成else即可,因为你前面已经包含了value不为null的所有可能性,所以换成else即可。
PS:JavaScript小秘诀,null、undefined、0、""、false、NaN都为false,所以使用条件的时候不用去判断是否等于或不等于前面的值。
比如你上面的[value !== null],可以换成[value]。
[value === null]可以换成[!value]。
慕粉15920169039
TA贡献1条经验 获得超0个赞
delete collection[id]['artist']; //问题在这里!!['artist']应该写成[prop];
value !== null 这个可以写成value
value === null 写成 !value
前面没问题吗,我也做的同样,但是push那部分总报错
-----完全错了 ==|||
添加回答
举报
0/150
提交
取消