给出以下代码:
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,而无需创建对原始数组的“引用”