在JS使用的一些基本测试中,我一直在尝试对象生成/添加到数组中。到目前为止,我已经使用了两种不同的方法来解决这个问题:
虽然在运行时没有错误,但是全局对象属性上的value字段总是输出一个2
(其中的值应该随着循环而递增),而函数方法似乎工作得很顺利。你知道为什么会这样吗?
我生成的最终输出是"[{"name":"Hello","value":2},{"name":"Hello World","value":1},{"name":"Hello","value":2},{"name":"Hello World","value":2},{"name":"Hello","value":2},{"name":"Hello World","value":3}]"
(从console.log(JSON.stringify(testArray));
)。
我原本期望的输出是"[{"name":"Hello","value":0},{"name":"Hello World","value":1},{"name":"Hello","value":1},{"name":"Hello World","value":2},{"name":"Hello","value":2},{"name":"Hello World","value":3}]"
相关函数和对象的代码可以在下面找到。
定义全局变量:
var globalVariable =
{
name: undefined,
value: undefined
}
工厂功能:
function globalVariableGen(name, valueInput)
{
return output =
{
name: name,
value: valueInput + 1
}
}
数组生成函数:
function test2()
{
var i, testArray = [];
for (i = 0; i < 3; i++)
{
alert(i.toString());
globalVariable.name = "Hello";
globalVariable.value = i;
testArray.push(globalVariable);
testArray.push(globalVariableGen("Hello World", i));
}
console.log(JSON.stringify(testArray));
}
亲切的问候,影子
发布于 2018-10-09 07:53:10
这是因为javascript是按引用传递的,而您引用的是多次添加到数组中的同一个globalVariable
。然后,数组包含多个指向globalVariable的指针,这些指针是完全相同的。
如果您将console.log(JSON.stringify(testArray)
添加到循环中,您将看到此行为。
> "[{"name":"Hello","value":0},{"name":"Hello World","value":1}]"
> "[{"name":"Hello","value":1},{"name":"Hello World","value":1},{"name":"Hello","value":1},{"name":"Hello World","value":2}]"
> "[{"name":"Hello","value":2},{"name":"Hello World","value":1},{"name":"Hello","value":2},{"name":"Hello World","value":2},{"name":"Hello","value":2},{"name":"Hello World","value":3}]"
https://stackoverflow.com/questions/52711446
复制相似问题