私は、引数を配列 [].slice.call(arguments) に変換できることをずっと前から知っていました。なぜなら、
argument は配列のようなオブジェクトなので、このように使用できます。しかし、配列のようなオブジェクトが
今日『Effective JavaScript』を読んだとき、これに特化したセクションがあり、とてもクールに感じました。
まず、私が書いたサンプル コードを見てみましょう:
です。
これも配列のようなオブジェクトです。
では、なぜ引数、文字列、および上記の b オブジェクトは配列のようなオブジェクトとみなせるのでしょうか?
それらはすべて、正当な長さ属性 (0 から 2**32 - 1 までの正の整数) を持ちます。
長さ属性の値が最大インデックスを超えています。
別の例:
これは強力すぎるようです。インターフェイスを定義するだけで、配列のすべてのメソッドが使用できます。
実際には、すべてのメソッドが使用できるわけではありません (Array.prototype.concat
) 2つの配列を接続するので配列の人でないと絶対に使えません。
もう 1 つの小さな問題は、文字列が作成後に不変であるため、どのように投げても不変のままであることです。
しかし、この本の著者は、なぜこれら 2 つの条件を満たす場合に配列のようなオブジェクトとみなされるのかについてはまったく説明していません。
彼は ECMAScript 委員会のメンバーなので、基本的に信頼できるものです。なぜこれら 2 つの条件を満たす場合に配列のようなオブジェクトとみなされるのかについては、Google で長時間検索しましたが、合理的な説明が見つかりませんでした。
以上がこの記事の全内容です。皆さんに気に入っていただければ幸いです。