2017-05-22 5 views
3

javascriptはオブジェクトの数値キーを使うことができるので、配列的なオブジェクトの存在は技術的に可能ですが、どうしてそれらが一般的になったのですか?なぜJavascriptで配列のようなオブジェクトを使用するのですか?

おそらく、これらの配列のようなオブジェクトは、に数字キーを持っていない可能性があります。 argumentsにはcalleeというプロパティがあるため、これらのプロパティに対応する適切な配列にすることはできません。

しかし、JavaScriptでは、オブジェクトとして配列を扱い、非数字キーを使用するために完全に有効です:オブジェクトが配列のようであり、それは希望の機能にアクセスすることが有益である場合

var myArguments = []; 
myArguments[0] = 0; 
myArguments['callee'] = function(){console.log('callee')}; 

をそれ以外の場合は配列プロトタイプから継承し、代わりに配列のようなオブジェクトにすることの利点は何ですか?


編集:ケースでは、オブジェクトのような配列はゼロから始まる連続数値プロパティを持つオブジェクトargumentsようになり、私の質問に明確ではありませんでした、そしてより1少ないlengthプロパティを持っています最高の数字キー。また、配列のプロトタイプを継承せず、配列メソッドへのアクセスも提供しません。

+2

'array-like' - あなたは配列を持ち、何も「好き」ではありません。また、javascriptのものと同様に、配列はObjectsから継承しているので、非数値のプロパティキーも可能です。 –

+1

(サブクラス) 'Array'から継承するので、コンストラクタ関数(インスタンスがすべて同じプロトタイプにリンクされている)を使ってそのようなオブジェクトを作成したい場合、実際の' Array'を使うことはできません。しかし配列のようなオブジェクト上で配列メソッドを使うために '.call()'や '.apply()'を使うことができます。 – nnnnnn

+0

@nnnnnn実際には、特に何かの意味があります'HTMLCollection'のように、Objectプロトタイプから直接継承するところでは、' arguments 'のために少し混乱します。 – martin

答えて

-2

実はJSのArrayオブジェクトがある:)

限り、あなたは配列を必要とするようJSエンジンは、配列の速度を最適化するので、配列のようなオブジェクトを作成することは悪い考えです。 しかし、可能です。

+1

しかし、実際の配列ではない配列のようなオブジェクトを作成するのはなぜ(比較的)共通しているのかという質問があります。 – nnnnnn

関連する問題