猿问

如果数组是通过引用传递的,那么下面的方法将如何工作?

var myarray = []

var array1 = [1,2,3]

myarray.push(array1)

array1 =[2,3,4]

myarray.push(array1)

console.log(myarray)

我懂了


[[1,2,3],[2,3,4]。


不应该这样吗


[[2,3,4],[2,3,4]


如果我通过引用?


谢谢


编辑:我猜这是因为= [2,3,4]创建一个新对象并分配array1引用它而不是相反


森林海
浏览 224回答 3
3回答

潇湘沐

您没有在修改变量(数组),而是在重新分配了新值。var myarray = [];var array1 = [1, 2, 3];myarray.push(array1);array1.push(2, 3, 4); // Modifying the array in memory.//myarray.push(array1);console.log(myarray);

凤凰求蛊

您需要更改的元素array1以保留引用。不重新分配它。var myArray = []var array1 = [1,2,3]myArray.push(array1)array1.forEach((e, i) => array1[i] = array1[i] + 1)myArray.push(array1)console.log(myArray)

POPMUISE

引用表示如果两个变量引用相同的对象/数组,则修改其中的一个(更改属性/删除属性)也会更改另一个变量。let array1 = [1,2,3];let array2 = array1;     //creating a referencearray1[0] = "something"; //modifyingconsole.log(array1)console.log(array2)引用并不意味着如果两个变量都引用相同的对象/数组,则为其中的一个赋一个新值以更改另一个。let array1 = [1,2,3];let array2 = array1;        //creating a referencearray1 = ["something",2,3]; //Assigning a new valueconsole.log(array1)console.log(array2)如果要更改,请创建一个引用,然后更改的第一个元素myarray并将其推入myarrayvar myarray = []var array1 = [1,2,3]myarray.push(array1)myarray[0] =[2,3,4]myarray.push(myarray[0])console.log(myarray[0]) //[2,3,4]console.log(myarray[1]) //[2,3,4]myarray[0][1] = "something else" //change both elementsconsole.log(myarray[0]) //[2,"something else",4]console.log(myarray[1]) //[2,"something else",4]
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答