私が信じている ECMA 標準の一部は、オブジェクトが配列のようなものである場合、Javascript コンソールはオブジェクトを配列として表示するということです。
例: ["hello", "world"] 数値でインデックス付けされた文字列を含むオブジェクトの場合。
配列のような動作は、オブジェクトに存在する長さプロパティと splice メソッド、および数値インデックス付きプロパティとして定義されます。
私たちの多くは、過去に jQuery でこれを見たことがあるでしょう。
私はこの振る舞いを利用しようとしてきましたが、それが望ましいと考えています。ただし、インデックスが変更されたときに追加の処理を実行できるように、インデックスがゲッター/セッターを使用して設定するという追加の要件があります。
ただし、これを行うと、上記の配列は代わりに次のようにレンダリングされます。
【未定×2】
ただし、それ以外の点では、オブジェクトは単純な例とまったく同じように動作します。
より良い説明については、この Fiddle を参照してください: http://jsfiddle.net/5YgAv/
ご覧のように?2 つの非常によく似た例ですが、getter の存在によりコンソールで壊れています。
最新の Chromium ソース コードをデバッグしてきましたが、Chrome は基本的に getter 関数を含むメッセージをコンソールにプッシュしているようです。ただし、関数を呼び出して値を取得できるようにコンソールのソース コードを変更する方法はありません。それが可能であれば、開発者ツールを変更してゲッターとセッターを正しく処理することができます。
私が知りたいのは、誰かがこの興味深い小さなバグについて洞察を持っているか、または Chrome チームにバグとして報告する前にどのように修正するのが最善かということです. 私は実際にこれを何らかの方法で自分で修正したいと思っています。
また、配列のようなオブジェクトのプロパティが変更されたときに特別な処理を行うことができるエレガントな回避策も受け入れています。
助けてオビ-スタックオーバーフロー-ケノービ、あなただけが頼りです!
【ライアン】