给出以下代码:

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()时创建)
提前致谢!

最佳答案

是因为线

varry = x;


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

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

varry = x.slice();

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

09-30 13:38