javascript - JSON 损坏的属性

标签 javascript json attributes

我很难理解 Javascript 的行为。

代码:

function getPosition(element){
    var position = {
        x:$(".line div").has(element).index(),
        y:$(".line").has(element).index()
    };
    console.log(position.y);
    console.log(position)
    return position;
}

现在从函数中调用它时,我得到了这样的结果:

0

Object
x: 8
y: 3

我不明白的是,当尝试通过对象引用而不是直接访问对象时,怎么可能更改对象属性。

但是当我从控制台调用相同的函数时,我得到了这个:

0

Object
x: 8
y: 0

这是传递给函数的同一个元素。当 X 或 Y 为 0(零)时,它似乎总是失败,当它是另一个数字时,它没问题。

谁能解释一下我做错了什么?或者它是某种 JS 错误? O_o

编辑:

所以我终于找到问题所在了。我一直认为我在传递值观,但不幸的是我一直都错了。在对 stackoverflow 的一些搜索中,我找到了 topic关于 JS 值和引用。

如果大家有兴趣又懒得看题目,可以看看这个例子。这几乎是不言自明的。

function test(){
    var a = 5;
    var b = a; //b now has value of 5
    console.log("a:"+a+":b:"+b);
    b = 4;//a still has value of 5 and b is assinged to 4
    console.log("a:"+a+":b:"+b);
    var c = {val:1};
    var d = c; //d now has reference to c
    d.val = 2; //c.val changes because it is a reference
    console.log(c);
}

编辑2: 哦,顺便问一下,如何将我的问题标记为已回答?

最佳答案

console.log 延迟将值转换为字符串,直到应用程序变慢,以便日志记录不会不必要地减慢应用程序。

如果 console.log(position) 显示的值与调用 console.log 时的值不同,因为 position 已在调用和控制台小部件决定格式化值以供显示的时间之间进行了修改。

您可以通过尝试以下 HTML 来查看:

<script>
// Emits the JSON form when converted to a string.
var obj = {
  x: 1,
  toString: function () {
    return JSON.stringify(this);
  }
};

console.log(obj);  // Often {x:2}
console.log("" + obj);  // Reliably {x:1}  

obj.x = 2;
</script>

寻找执行类似操作的代码

obj = getPosition(...);
...
obj.y = <expression that evaluates to zero>

或者,您可以通过更改强制急切格式化

 console.log(position)

 console.log("" + position)

关于javascript - JSON 损坏的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9673766/

相关文章:

javascript - 如何将级别添加到 JSON 数组?

c# - 如何使用带有身份验证 token 的 DataContractJsonSerializer

Python 3.2,Pygame "AttributeError: ' pygame.Rect'对象没有属性 'bullet_RECT'

javascript - “来自纹理的 Sprite ”不采用命中区域多边形

javascript - 提交时,检查选中的复选框数量

javascript - 在json中传递函数并执行

C#通过属性获取字段值(PropertyInfo)

javascript - 在移动设备上关闭浏览器后,音频继续播放

javascript - Browserify 错误结束 gulp 监视任务

php - WooCommerce 通过属性查询获取产品