web-dev-qa-db-ja.com

配列の「...」(トリプルドット)表記はどういう意味ですか?

...表記は正確です。

私はそれを理解するためにBabelで簡単な例を試しました( 例を見る )が、それはそうです:

ES6構文

let myArray = [1, 2, 3, ...18];

console.log(myArray); // [1, 2, 3]
console.log(myArray[4]);// undefined
console.log(myArray.length); // 3

これはES5構文と同じです

"use strict";

function _toConsumableArray(arr) { 
    if (Array.isArray(arr)) { 
        for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {
             arr2[i] = arr[i];
        }
        return arr2;
     } else { 
        return Array.from(arr); 
     } 
}

var myArray = [1, 2, 3].concat(_toConsumableArray(18));

console.log(myArray); // [1, 2, 3]
console.log(myArray[4]); // undefined
console.log(myArray.length); // 3

BUT:このコードは何をしますか?出力(console.log)はこのコード(ES5)と同じです。

var myArray = [1,2,3];

console.log(myArray); // [1, 2, 3]
console.log(myArray[4]);// undefined
console.log(myArray.length); // 3

...18表記はどういう意味ですか?

25
Aral Roca

...spread operator )は、インデックス0からインデックスlength-1に各値を返すことで機能します。

例として:

[...'18'] // returns ['1', '8']

これは次と同じです:

['18'[0], '18'[1]]

ここで、1から18に配列を取得するには、次のようにします。

[...Array(19).keys()].slice(1)

またはこれをマップで:

[...Array(18)].map(_=>i++,i=1)

それが役に立てば幸い。

27
user4227915

[1, 2, 3, ...18]は無効です。

Number...を使用することはできません。 ...は、 ArrayStringなどの反復可能なオブジェクトでのみ使用できます または Object

Tracur -別のトランスパイラー-同じコードを入力するとエラーがスローされることに注意してください。

TypeError:反復不可能なオブジェクトを拡散できません。

の仕様 には詳しくありませんが、これはバベルの「バグ」かもしれないと思います。

4
Alex Booker