我很难理解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的一些bug? O_O
编辑:
所以我终于找到了问题所在。我一直以为我是在传递价值观,但不幸的是我一直都错了。在stackoverflow的一些搜索期间,我找到了关于JS值和引用的topic。
如果有人对此主题感兴趣且懒得阅读,您可以查看此示例。这几乎是不言自明的。
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);
}
EDIT2: 哦,顺便说一句,我如何标记我的问题?
答案 0 :(得分:3)
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)
答案 1 :(得分:0)
所以我终于找到了问题所在。我一直以为我是在传递价值观,但不幸的是我一直都错了。在stackoverflow上的一些搜索期间,我找到了关于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);
}