Chrome の JavaScript コンソールの動作: オブジェクトの遅延評価
オブジェクトを評価するときの Chrome JavaScript コンソールの動作は、予期しない可能性があることが確認されています。これを説明するには、次のコードを考えてみましょう。
var s = ["hi"]; console.log(s); s[0] = "bye"; console.log(s);
Firefox では、コンソールの出力は次のとおりです。
[ "hi" ] [ "bye" ]
ただし、Chrome バージョン 7.0.517.41 ベータ版では、出力は次のようになります。
[ "bye" ] [ "bye" ]
予想外の評価動作
この動作は、オブジェクトの評価時に Chrome のコンソールが「遅延」している可能性があることを示唆しています。最初の console.log ステートメントが実行されると、コンソールはメモリ内のオブジェクトを参照します。最初の要素を「hi」から「bye」に変更するなど、オブジェクトに対する後続の変更は、最初の console.log ステートメントの出力には反映されません。これは、コンソールが最初の console.log ステートメントの時点でのみオブジェクトを評価し、スナップショットを保存することを意味します。
バグの説明
この動作は、 Webkit バグ レポートは次のとおりです: https://bugs.webkit.org/show_bug.cgi?id=35801 (現在は修正されています)。このバグは、Chrome のコンソールが直接アクセスされるオブジェクトに対して遅延評価を実行しないことを示しており、その結果、観察された動作が発生します。
回避策
この予期しない動作を防ぐには、次の手順を実行します。 console.log に渡す前に、オブジェクトの toString を呼び出すことができます。これにより、Chrome は後続の変更によって変更されないオブジェクトの表現を作成し、コンソール出力にオブジェクトの現在の状態が確実に反映されるようにします。
var s = ["hi"]; console.log(s.toString()); s[0] = "bye"; console.log(s.toString());
出力:
hi bye
以上がChrome の JavaScript コンソールでオブジェクトを評価すると予期しない結果が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。