下面提供了以下示例:http://jsfiddle.net/valgaze/se9bmx7t/
大问题:为什么清除阵列"打破" Javascript中对象文字中数组与该数组引用之间的关系?
想象一下,我们有一个存储在变量中的数组,并且我们有一个对象文字,并且引用该数组作为该对象的一个属性。当我们在数组上使用任何典型的数组方法(push,pop,shift等)时,对象文字会随结果一起更新。同样,如果我们通过从对象文字中访问它来更新数组,那么数组变量就会更新。
实施例。 更新对象会更新阵列(反之亦然)
var myArray = ["item1", "item2", "item3"];
var myObject = {key1:"value1", key2:myArray}
//Array is updated, so object is updated
myArray.push("item4"); //Update the array
console.log(myObject.key2); //Object's array updated with new pushed value
//Object is updated, so array is updated
myObject.key2.push("item5"); //myArray is updated with the item5
console.log(myArray); //Array updated with item5
问题:为什么"清除"数组是否破坏了对象中数组引用的绑定/耦合?
//[...] continued from first block above
myArray = ["muahahah, everything is wiped out"];
console.log("myArray", myArray); //Returns ["muahahah, everything is wiped out"]
console.log("myObject.key2", myObject.key2); //Returns the original items 1-5
//If we clear out the array via the object, the array does get updated
myObject.key2 = ["cleared the array from object"];
console.log("myArray", myArray); //returns ["cleared array"]
console.log("myObject.key2", myObject.key2); //returns ["cleared array"]
操作像这样的数组肯定会发生一些事情:myArray = ["擦除值"];
答案 0 :(得分:1)
您没有“清除”数组,而是为变量分配新值。原始数组仍然存在(作为另一个对象内部的引用),但现在myArray
指向不同的数组引用。