在Javascript对象文字中更改数组变量

时间:2015-04-09 01:22:58

标签: javascript arrays variables object

下面提供了以下示例: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 = ["擦除值"];

1 个答案:

答案 0 :(得分:1)

您没有“清除”数组,而是为变量分配新值。原始数组仍然存在(作为另一个对象内部的引用),但现在myArray指向不同的数组引用。