2016-04-27 8 views
3

ES2015でJavaScript文字列を反復可能にするという設計上の決定を理解してくれる人がいらっしゃいますか?ほとんどのイテラブルは、他のもののコレクションを表します。Array,SetMapGenerator(まあまあ)。文字列は、文字列のコレクション(Unicodeコードポイントも含む)でなければなりません。したがって、文字列のコレクション(たとえば、文字列のSetまたは文字列を生成するジェネレータ)を受け入れる機能を使用する場合は、1つの文字列にまたはのように、ユーザーの意図を区別する方法はありません。彼女は単一の文字列またはコードポイントの繰り返し可能なものを意味しましたか?文字を反復することは、文字列の集合を渡すことと比較して、コーナーケースのように思える。この場合の私の傾向は、(意図された)タイプがstringIterable<string>である場合、特別な場合の文字列パラメータになります。ES2015で文字列iterableが使用されるのはなぜですか?

function deleteDocuments(ids /* string or Iterable<string> */) { 
    if('string' === typeof ids) { 
    deleteSingleDocById(ids); 
    } else { 
    for(let id of ids) { 
     deleteSingleDocById(id); 
    } 
    } 
} 

何が欠けていますか?

+3

関数が単一のパラメータを必要とする場合は、反復可能な文字列か反復可能な配列のいずれかになります。なぜiterableを処理するだけではないのですか?あなたのジレンマは不明です。 – Pointy

+0

FWIWこれは、文字列の繰り返しがPythonでうまくいった方法です。 –

+0

期待される結果は何ですか? – guest271314

答えて

9

これは実際にES2015/ES6に先行した原則の続きです。 Internet Explorer 8のリリース以降、すべてのブラウザで同じ構文を使用して配列と文字列の内容をループすることができました。

var array = ['a', 'b', 'c']; 

for (var i = 0; i < array.length; i++) { 
    console.log(array[i]); 
} 
var string = 'abc'; 

for (var i = 0; i < string.length; i++) { 
    console.log(string[i]); 
} 

文字列は既に "アレイ状" でした。それらは暗黙の配列反復プロトコル(.lengthとインデックス付きプロパティを持つ)を満たし、各文字はルックアップ時にすでに独自の文字列として扱われていました。それが正しい選択であったかどうかを議論することができましたが、現時点では遠い歴史です。 ES2015以降で、配列と文字列を繰り返し処理するために異なる構文を使用することが予想される場合は、動作が変わってしまいます。

+0

ありがとう、ジェレミー。それが私が考えたものです。前進する不幸な痕跡のようだ。私の文字列を構成する(配列の)文字を繰り返し処理したいのであれば、実際には ''string'.split(' ')'を明示的に使用することをお勧めします。私は、この時点ではここにもそこにはいないと思います。 –

関連する問題