2017-10-06 4 views
0

Javascriptのイベントを順不同で扱うことができず混乱しています。ウィンドウ/クロムでは、以下のコードは、クラスが変更される前にクラスが変更されたオブジェクトをコンソールに出力しますが、クラスだけを出力すると、変更されていないクラスが表示されます。誰かがこれを支配しているルールを説明してもらえますか?私はどのような状態で私のオブジェクトを見ることを期待するかを予測する方法を知らない。Javascriptが順序どおりに動作しない

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
 
<html xmlns="http://www.w3.org/1999/xhtml"> 
 

 
<head> 
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
 
    <title>Table Schema</title> 
 
</head> 
 

 
<body> 
 
    <a href="#" class="first_class" onclick="checkClass(this)">I am supposed to be first_class!</a> 
 
    <script> 
 
    function checkClass(obj) { 
 
     console.log(obj); 
 
     console.log(obj.className); 
 
     if (obj.className == 'first_class') { 
 
     obj.className = 'second_class'; 
 
     } 
 
    } 
 
    </script> 
 
</body> 
 

 
</html> 
 
<html>

+0

は私のための最初のクラスは、文字列とobjは、その時点でのスナップショットではない最新の値を示しています。 https://stackoverflow.com/questions/30150469/why-console-log-displays-incorrect-objects-values – epascarello

答えて

0

objの値はreference to an objectあります。

obj.classNameの値は文字列で、別の文字列です。

Some consoles are asyncronous。オブジェクトをレンダリングすると、オブジェクト内のデータが変更され、更新されたデータが表示されます。

文字列を変更する方法はありません。文字列は不変なので、文字列を渡すと、非同期性は問題になりません。

更新されたオブジェクトが表示されないようにするには、this questionを参照してください。

+0

おかげさまで@クエンティン、それは役に立ちます。私はユースケースで文字列を渡すことができるかどうかを調べます。より確実にオブジェクトを出力する方法はありますか? –

+0

@RobynWyrick - 答えの最後の文を参照してください。ありがとう。 – Quentin

+0

ありがとう。リンクをたどり、それがうまくいくはずです。私はMikulasに同意する必要があります。私は、コンソールのこの動作がプログラマの観点から好ましいと思われる状況は考えられません。 –

関連する問題