首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Javascript整数到字符串的输出与预期值不匹配

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

Stack Overflow用户
提问于 2018-10-09 07:42:38
回答 1查看 139关注 0票数 2

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

  • 单个全局对象,其字段可以改变,然后添加。
  • 工厂函数,它通过附加操作生成相同的对象,以显示细微的差异(值字段加1)

虽然在运行时没有错误,但是全局对象属性上的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}]"

相关函数和对象的代码可以在下面找到。

定义全局变量:

代码语言:javascript
复制
var globalVariable =
{
    name: undefined,
    value: undefined
}

工厂功能:

代码语言:javascript
复制
function globalVariableGen(name, valueInput)
{
    return output =
    {
        name: name,
        value: valueInput + 1
    }
}

数组生成函数:

代码语言:javascript
复制
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));
}

亲切的问候,影子

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-09 07:53:10

这是因为javascript是按引用传递的,而您引用的是多次添加到数组中的同一个globalVariable。然后,数组包含多个指向globalVariable的指针,这些指针是完全相同的。

如果您将console.log(JSON.stringify(testArray)添加到循环中,您将看到此行为。

代码语言:javascript
复制
> "[{"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}]"
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52711446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档