拡張演算子「spread」の会話
1442 ワード
原文のリンク-航洋無声-Github
拡張演算子は、見た目がレストパラメータと似ていますが、3つのポイントです.
拡張演算記号は、2つの場合に分けられます. iterable「一般的には配列」 enumerable「一般的な状況を対象とする」 標準ES 2015では、iterableデータに対してのみ拡張演算子を実現し、iterableデータのデータ系列をカンマで分割されたパラメータシーケンスに変換する.
たとえば:
ただし、注意すべき点があります.非iterableデータは拡張演算子を実行し、エラーが発生します.
ES 7のある提案では、拡張演算子はenumerableデータを導入します.
たとえば:
Object.assign(targt,…sources)に詳しいです.2つの特徴があります. sourcesパラメータが「オリジナルタイプ」であれば、「対象」 に包装されます. sourcesパラメータはnullとundefinedであれば無視されます.
たとえば:
たとえば:
拡張演算子は、見た目がレストパラメータと似ていますが、3つのポイントです.
拡張演算記号は、2つの場合に分けられます.
たとえば:
let array = [5, 12]
let arrayCopy = [11, ...array]
// :let arrayCopy = [11, 5, 12]
// arrayCopy ==> [11, 5, 12]
console.log(...[5, 12])
console.log(5, 12)
// 2
// :5 12
上の2つの列を通して、「拡張演算子の結果は、カンマ区切りのパラメータ系列」の意味がよりよく理解されるはずです.ただし、注意すべき点があります.非iterableデータは拡張演算子を実行し、エラーが発生します.
ES 7のある提案では、拡張演算子はenumerableデータを導入します.
たとえば:
let obj = {name: 'hangyangws'}
let objCopy = {...obj}
console.log(objCopy) // :{name: 'hangyangws'}
実はenumerableデータの拡張演算子の下の実装はObject.assignを利用しています.Object.assign(targt,…sources)に詳しいです.2つの特徴があります.
たとえば:
Object.assign({}, null) // :{}
Object.assign({}, undefined) // :{}
Object.assign({}, 0) // :{}
Object.assign({}, 'FJ') // :{0: "F", 1: "J"}
// :
//
// 「 」, null、undefined
拡張演算子が2つある以上、JSインタプリタはどのようにして使うのか分かりますか?したがって、拡張演算子はコードの具体的な実行文脈によって判断されます.たとえば:
let test = [...null]
// :null is not iterable
let test = {...null}
// test ===> {}