質問:
JavaScript コード スニペットでは、配列が定義されており、コンソールに出力されます。配列の要素を変更した後、再度出力されます。 Firefox のコンソールには両方の正しい値が表示されますが、Chrome のコンソールはオブジェクトを遅延評価し、両方のインスタンスの変更された値を出力します。
コードにエラーがありますか、それとも Chrome コンソールの動作ですか?
答え:
WebKit のバグ レポート (現在は修正されています) で指摘されているように、 Chrome のコンソールでのオブジェクトの評価に関する問題です。
説明と回避策:
この動作は、Chrome のコンソールのオブジェクトに対する遅延評価の性質に起因します。これらはコンソールに表示されるときにのみ評価されるため、表示前にオブジェクトが変更されると誤った出力が発生します。
この問題を回避するには、オブジェクトに対して .toString() を呼び出して、この表現は、後続のコード変更によって変更されません。コンソールに出力する前に .toString() を呼び出すと、正しい値が表示されます。
修正コード:
var s = ["hi"]; console.log(s.toString()); // Prints "hi" s[0] = "bye"; console.log(s.toString()); // Prints "bye"
この修正されたアプローチを使用すると、コンソール出力がChrome の場合は Firefox の場合と同じになり、配列の両方の正しい値が表示されます。
以上がChrome の JavaScript コンソールに元の値ではなく変更されたオブジェクト値が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。