Javascript整数到字符串输出与预期值不匹配
在JS使用的一些基本测试中,我一直在处理对象生成/添加到数组的问题。到目前为止,我对这个问题使用了两种不同的方法:Javascript整数到字符串输出与预期值不匹配,javascript,Javascript,在JS使用的一些基本测试中,我一直在处理对象生成/添加到数组的问题。到目前为止,我对这个问题使用了两种不同的方法: 一个单一的全局对象,它具有不同的字段,然后添加 一个工厂函数,它通过一个额外的操作生成相同的对象,以显示细微的差异(在值字段中添加1) 虽然在运行时没有错误,但全局对象属性上的值字段始终输出一个2(假设值随循环而递增),而函数方法似乎没有问题。你知道为什么会这样吗 我生成的最终输出是“[{”name:“Hello”,“value”:2},{”name:“Hello World”
- 一个单一的全局对象,它具有不同的字段,然后添加
- 一个工厂函数,它通过一个额外的操作生成相同的对象,以显示细微的差异(在值字段中添加1)
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}”
(来自控制台.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));
}
阵列生成功能:
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));
}
函数test2()
{
var i,testArray=[];
对于(i=0;i<3;i++)
{
警惕(i.toString());
globalVariable.name=“你好”;
globalVariable.value=i;
测试阵列推送(全局可变);
推(globalVariableGen(“你好,世界”,i));
}
log(JSON.stringify(testArray));
}
亲切问候,,
Shadow这是因为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}]"
将对象推送到数组时,它不是推送到的对象的副本,而是对现有对象的引用。这意味着,如果以后修改此对象,则“推送到数组中的对象”将反映相同的变化。我不确定您试图实现什么,但您在显示的任务中使用全局变量是(部分)混乱的根源。此外,您的函数“globalVariableGen”似乎没有为“globalVariable”分配任何内容。非常好,谢谢!因此,在每次不生成新对象的情况下,它基本上就像指向同一初始对象的指针。是的,确实如此,(但我不想使用“指针”一词,它更像是一个“引用”,非常相似)非常感谢您的快速回复。我不知道js中的数组是如何实现的:)