我很難理解Javascript的行爲。JSON損壞的屬性
代碼:
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的搜索過程中,我發現關於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: 噢,對了,我怎麼能記住我的問題,因爲回答?
好吧,現在我知道爲什麼可以看到兩個不同的值,但我無法找到我在我的代碼中做錯了什麼。我甚至改變了名字,以便它不會重疊或者什麼。我如何知道問題在哪裏? – 2012-03-12 20:15:35
@VytautusButkus,如果你使用Firefox,你可以使用['Object.watch'](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/watch)來安裝屬性斷點obj的'y'屬性,所以你可以在代碼修改時轉儲'console.trace()'或'throw'。 – 2012-03-12 20:42:17
奇怪的行爲,如果我設置對象的手錶,它會得到正確的值,但只要我註釋它就會回到錯誤的值。任何其他提示? – 2012-03-12 22:13:31