数组更改值的原因很奇怪

时间:2018-07-10 10:36:47

标签: javascript arrays

给出以下代码:

function createJson() {
var varry = new Array();
varry = x;
for (i=0 ; i < arry.length ; i++) { 
    if (arry[i]["questionVisibility"] == "1"){
        if (arry[i]["questionType"] != 3) {
            varry[i][1] = document.getElementById('te'+arry[i]["id"]+'et').value;
        } else {
            e = document.getElementsByName("te"+arry[i]["id"]+"et")[0];
            p = e.options[e.selectedIndex];
            varry[i][1] = p.text;
        }
    }
}

console.log(x);
console.log(varry);

其中X是这样创建的数组(在另一个函数中):

x = document.getElementById("jsonData").value;
x = JSON.parse(x);
x = x[0];
x = x.data;
x = JSON.parse(x);

谁能解释我为什么当我调用createJson()函数时,x数组被更改了? (x已在调用createJson()时创建) 预先感谢!

1 个答案:

答案 0 :(得分:3)

是因为线路

varry = x;

将数组分配给变量会创建一种原始值的引用,因此在修改变量时也会修改x

如果您想将x的副本复制到varry中而无需参考 array.slice()像这样:

varry = x.slice();

这会将x中的值插入varry,而不会创建对原始数组的“引用”