Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript整数到字符串输出与预期值不匹配_Javascript - Fatal编程技术网

Javascript整数到字符串输出与预期值不匹配

Javascript整数到字符串输出与预期值不匹配,javascript,Javascript,在JS使用的一些基本测试中,我一直在处理对象生成/添加到数组的问题。到目前为止,我对这个问题使用了两种不同的方法: 一个单一的全局对象,它具有不同的字段,然后添加 一个工厂函数,它通过一个额外的操作生成相同的对象,以显示细微的差异(在值字段中添加1) 虽然在运行时没有错误,但全局对象属性上的值字段始终输出一个2(假设值随循环而递增),而函数方法似乎没有问题。你知道为什么会这样吗 我生成的最终输出是“[{”name:“Hello”,“value”:2},{”name:“Hello World”

在JS使用的一些基本测试中,我一直在处理对象生成/添加到数组的问题。到目前为止,我对这个问题使用了两种不同的方法:

  • 一个单一的全局对象,它具有不同的字段,然后添加
  • 一个工厂函数,它通过一个额外的操作生成相同的对象,以显示细微的差异(在值字段中添加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中的数组是如何实现的:)