ホームページ > ウェブフロントエンド > jsチュートリアル > Chrome の JavaScript コンソールでオブジェクトを評価すると予期しない結果が表示されるのはなぜですか?

Chrome の JavaScript コンソールでオブジェクトを評価すると予期しない結果が表示されるのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-27 04:59:13
オリジナル
639 人が閲覧しました

Why Does Chrome's JavaScript Console Show Unexpected Results When Evaluating Objects?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート