猿问

JSON的处理问题

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这个属性,为什么我这样删除不了??

慕勒5811226
浏览 2818回答 4
4回答

Suber丶林

你第三个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]。

Gavin_Alison

后台输出collection[id]['artist']是否有值,如果有,为什么不置空, 为null.

慕粉15920169039

delete collection[id]['artist'];  //问题在这里!!['artist']应该写成[prop];value !== null 这个可以写成valuevalue === null 写成 !value前面没问题吗,我也做的同样,但是push那部分总报错-----完全错了 ==|||

老猿

‘’===null    这个是false吧  
随时随地看视频慕课网APP
我要回答