2017-06-05 61 views
-1

我使用Fancytree,我正在使用ExtEdit extension創建一個新節點。該節點的標題(正文)似乎設置正確,但該值在兩個console.log()語句之間始終發生變化,並且將錯誤的值發送到服務器。在兩個console.log()行之間改變的Javascript變量值

這是怎麼回事?這讓我難以置信。

Here'sFancytreeNode API。

這是我使用的全功能:

function createNode(data) { 
    console.log('this is the data object'); 
    console.log(data); 
    console.log('this is data.node.title'); 
    console.log(data.node.title); 
    $.ajax({ 
     method: 'post', 
     data: { 
      name: data.node.title, 
      parentId: data.node.parent !== undefined ? data.node.parent.key : null 
     }, 
     url: '/my/url' 
    }).success(function (thisData, status, jqXHR) { 
     data.node.key = thisData.id; 
    }); 
} 

這是輸出。請注意0​​與衆不同。

Mind-boggling result

+4

Console.log需要引用,因爲data是一個對象,而data.node.title是一個字符串。要知道確切時間的值,請克隆它(可以使用toJSON(stringify)) – Nevosis

+0

@Nevosis,它是'JSON.stringify(data)'。 –

+0

@Nevosis對不起,我不太明白。我從來沒有遇到過這樣兩個不同的問題。我以爲console.log只是輸出當前存在的對象/字符串。我不明白爲什麼'JSON.stringify(data)'會返回一個不同的值。 – vaindil

回答

0

我能夠從Nevosis評論看着辦吧。當使用console.log()記錄對象時,實際上並未對其進行評估 - 它只是參考。 Fancytree事件導致函數起火有點奇怪;直到事件結束,data.node.title未設置爲新值,但直到該點之後,我纔在控制檯中擴展該對象。 data.node.title直接進行記錄評估(因爲它必須是),這就是值不同的原因。通過在console.log()之後立即設置斷點,我能夠看到正確的data對象。