配列、配列のような、反復可能
配列のようなとの反復可能の定義を見て:
反復可能オブジェクトとアレイのお気に入り:
同じように見えるが、非常に異なる2つの公式の用語があります。あなたは混乱を避けるためにそれらをよく理解していることを確認してください。
- 反復可能オブジェクトが実装するオブジェクトであり
Symbol.iterator
、上述のように、方法。- アレイ-likesがインデックスと長さを持つオブジェクトなので、配列のように見えます。
鎖は、配列の試作例達成するためSymbol.iterator
のインタフェースをので、アレイは、反復可能なオブジェクトです。
反復可能オブジェクトの(反復処理可能)事業者は、拡張に使用できる...
とfor..of
サイクル:
var arr = [1, 2, 3, 4];
var arr2 = [...arr];
console.log(arr2); // 1,2,3,4,5
for (let value of arr) {
console.log(value); // 1 2 3 4 5 -- 带换行
}
クラス・アレイ(アレイ状)を達成するために、必ずしもではないSymbole.iterator
、オブジェクトが反復可能でない場合、この方法を使用することができず[...arrlike]
、使用できないアレイに拡張for..of
など、反復を実行します。
var arrlike = {
0: 100,
1: 200,
2: 300,
length: 3
};
var arr = [...arrlike]; // SyntaxError: Unexpected token
for (let value of arrlike) { // TypeError: arrlike is not iterable
console.log(value);
}
簡単な方法があることもあり反復可能または配列のようなこのメソッドは、配列にArray.form()
構文は次のとおりです。
Array.from(obj[, mapFn[, thisArg]]) // 形参是巴科斯范式BNF 表示法
// 参数含义可自行查询 MDN文档
次のように使用方法は以下のとおりです。
var arrlike = {
0: 100,
1: 200,
2: 300,
length: 3
};
var arr = Array.from(arrlike);
console.log(arr); // 100,200,300
反復可能では、アレイ内に延在するように、対応する演算子を使用することができます[...iterable]
。
var iterable = {
*[Symbol.iterator] () {
for (let i = 1; i <= 4; i ++) {
yield i;
}
}
}
var arr = [...iterable];
console.log(arr); // 1,2,3,4
また、使用してアレイ状および非反復可能オブジェクトに対して、参照の前に[...arrlike]
エラー。
そのため、オペレータは、配列に拡張され、単純な配列のように使用することはできません!
サプリメント
ECMAScript2018後に任意のオブジェクトの拡張演算子を使用することができます。
var obj = {
a: 100,
b: 200,
c: 300
};
var obj2 = {...obj};
console.log(obj2); // {a: 100, b: 200, c: 300}
// 但是这样只能将对象转换为对象,依旧不能将 non-iterable 对象转换为数组
var arr = [...obj];
// 注意区别 {...obj} 与 [...iterable]