2017-05-18 9 views
1

プロパティの.lengthのすべてのjavacriptは、反復可能な要素に[<numeric index>]経由でアクセスできますか?組み込みのiterables:プロパティの長さとアクセサの意味

Array -> has `.length` & has `[]` accessor 
String -> has `.length` & has `[]` accessor 
TypedArray -> has `.length` & has `[]` accessor 
Set -> does not have `.length` & does not have `[]` accessor 
Map -> does not have `.length` & does not have `[]` accessor 
NodeList -> has `.length` & has `[]` accessor 
HTMLCollection -> has `.length` & has `[]` accessor 

このルールを破る他の組み込みのイテレート可能オブジェクトがあるかどうかはわかりません。

+2

'NodeList'と' HTMLCollection'はJavaScript組み込み関数ではなく、DOMオブジェクトです。 – Bergi

+0

よろしくお願いします。 – xgbuils

答えて

0

はJavaScriptですべてitterablesは、プロパティの長さ

アレイ(または列)を持っていないエントリの数をカウントするプロパティ.lengthを持っています。代わりにMaps and Setsでは.sizeメソッドを使用します。

基本的 .lengthは、シーケンス(インデックス可能ですデータ構造)のために使用され

、および.size.next()を持っている必要はありません(そのようなアレイのような)通常順序付けられていないコレクション(例えば地図またはセット)

イテレート可能オブジェクトのためでありますメソッドがあり、それらのうちのいくつかは行いません。代わりに、イテレータ(つまり、.next()メソッドを持つオブジェクト)を返す特別なメソッドSymbol.iteratorを持っています。 (@frxstremに編集クレジット)

私はラウンドこの他の方法を述べるだろうIteration Protocol

+1

繰り返しプロトコルに関する3番目の段落は誤りです:iterables(配列など)は '.next'メソッドを持つ必要はなく、そのほとんどは行いません。代わりに、特殊メソッド['[Symbol.iterator]()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/iterator)があります。 *イテレータ(つまり、 '.next()'メソッドを持つオブジェクト)を返します。 – Frxstrem

+0

最初の段落も間違っています。 MapとSetには、size()メソッドではなく、sizeというプロパティがあります。そして、それは私の質問に答えることはできません、ごめんなさい、ありがとう! – xgbuils

+0

感謝の気持ちの良い@xgbuils(私はJavaモードであった)、それは今更新されています:) – Lissy

2

にMDNのマニュアルを参照してください:

  • すべてのインデックス可能なコレクションは.length性質を持っているん
  • すべてインデックス可能なコレクションは反復可能です(つまり、[Symbol.iterator]メソッドを持つ)

これを保証する仕様(特に将来のコレクションのためのガイドライン)はありませんが、あなたの質問と同じようにすべての標準組み込み関数を単純に表形式にすることができます。

1:String既に反復値は、インデックス付きの要素に対応することが期待される規則の例外を提供することに注意してください - た場合、それが配列の場合、lengthを使用

+0

Thanks @Bergi!それは本当に便利でした。 – xgbuils

0

それはiteratesコードポイントの代わりに文字それはコレクションですuse size

+0

ハハ、簡潔に置く!また、インデックス可能な構造体にもブラケット記法を使用できます – Lissy

関連する問題