2017-06-05 8 views
-1

Fancytreeを使用しています。ExtEdit extensionを使用して新しいノードを作成しています。ノードのタイトル(メインテキスト)は正しく設定されているように見えますが、2つのconsole.log()ステートメントの間で値が一貫して変化し、間違った値がサーバーに送信されています。2つの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; 
    }); 
} 

これが出力されます。どのようにdata.node.titleが異なるかに注目してください。

Mind-boggling result

+4

Console.logはdata.node.titleが文字列であるのに対し、dataはオブジェクトであるため、参照をとります。正確な値を知るためには、クローンしてください(toJSON(stringify)で行うことができます) – Nevosis

+0

@Nevosis、それは 'JSON.stringify(data)'です。 –

+0

@Nevosis申し訳ありませんが、私はかなり理解していません。私はこれまでのように2つの値が違っていた問題は一度もありませんでした。私はconsole.logが現在存在するオブジェクト/文字列を単に出力すると思った。私はなぜ 'JSON.stringify(data)'が別の値を返すのか分かりません。 – vaindil

答えて

0

私はNevosisによってコメントからそれを把握することができました。オブジェクトがconsole.log()を使用して記録されている場合、実際には評価されません。参照のみです。機能を発動させるFancytreeのイベントは少し不思議です。イベントが終了するまでdata.node.titleは新しい値に設定されていませんが、その時点まではコンソールでオブジェクトを展開していませんでした。 data.node.titleが直接ログに記録されたときに評価されます(値が異なるため)。そのconsole.log()の直後にブレークポイントを設定して、正しいdataオブジェクトを確認することができました。

関連する問題