TIL [Spread Operator]
14637 ワード
MDNから抽出されたSpread演算子
展開構文では、配列や文字列などの繰り返し可能な文字をゼロまたは複数の引数(関数呼び出し)または要素(配列テキスト)に展開し、オブジェクトをゼロまたは複数のキー値ペアに展開できます.
これだけではわからない😥
Spread演算子構文
1.関数の呼び出し:
myFunction(...iterableObj);
2.配列文字と文字列:
[...iterableObj, '4', 'five', 6];
3.対象テキスト:
let objClone = { ...obj };
このように、元の配列やオブジェクトを最大限に保護し、他の場所にコピーする役割を果たしています.じゃ、また見てみます.関数呼び出しは、配列内の要素を関数として使用するためのパラメータです。
function myFunction(x, y, z) { }
var arr = [0, 1, 2];
myFunction(...arr);
このようにargs[0]、args[1]、args[2]は、x、y、zという関数パラメータに順次割り当てられる.では、配列のパラメータ数と関数のパラメータ数は同じでなければなりません.function myFunction(v, w, x) { // 함수의 인자는 3개
console.log(v); // 0
console.log(w); // 1
console.log(x); // undefined
}
var arr = [0, 1]; // 배열의 엘리먼트는 2개
myFunction(...arr);
関数が割り当てられていないパラメータはundefinedを返します.タイルテキストで展開
元の参照タイプデータ(配列、オブジェクト、関数など)は、変数に値を割り当てるのではなく、変数に値を持つアドレスを割り当てます.
let arr = [0, 1, 2];
arr = newArr;
newArr[0] = 10;
arr; // [10, 1, 2] newArr를 바꿨는데 arr도 똑같이 바뀜
このようにarrをnewArrにコピーすると、対応するアドレスが割り当てられるので、newArrを変更すると、アドレスに格納されている値が変更され、arrもアドレスを参照し続けるため、newArrと同じになります.1-1. しかし,spread演算子を用いると,このような事態を防止することができる.
let arr = [1, 2, 3];
let newArr = [...arr]; // arr.slice() 와 유사
newArr.push(4); // [1, 2, 3, 4]
arr; // [1, 2, 3];
1-2. コプリット[配列#7]
getAllLettersという関数に文字列を入れ、各文字を配列の要素にする必要があります.split関数は使用できますが、問題でsplitを使用しないでください.そこで調べてみると,拡散関数を用いて簡単に解くことができる.
function getAllLetters(str) {
return [...str];
}
console.log(getAllLetters('Radagast')); // ['R', 'a', 'd', 'a', 'g', 'a', 's', 't']
文字列を配列に配置しspread関数を使用すると、配列内の各文字を要素にすることができます.3.オブジェクトテキストの展開
let obj1 = { foo: 'bar', x: 42 };
let obj2 = { foo: 'baz', y: 13 };
let clonedObj = { ...obj1 }; // { foo: "bar", x: 42 }
let mergedObj = { ...obj1, ...obj2 }; // { foo: 'baz', x: 42, y: 13 }
clonedObj.foo = 'lol';
console.log(clonedObj); // { foo: 'lol', x: 42}
console.log(obj1); // { foo: 'bar', x: 42 }
clonedObj.fooの値は変更されましたがobj 1です.fooの値は相変わらずであることがわかります.4.オブジェクトまたは配列にネストされたデータがある場合?
let c = [1, 2, [3, [4, 5]]];
let d = [...c];
オブジェクトまたは配列の元のデータはdeepcopy(ソースとコピーされたデータは互いにxに影響を及ぼす)であり、オブジェクトまたは配列の参照データは浅いcopy(ソースとコピーされたデータは互いに同じアドレスを指すため、相互にoに影響を及ぼす)であると考えられる.5.オブジェクトまたは配列からネストされたデータにコピーしたい場合は、deep copyを実行しますか?
let object = {
foo: 'bar',
value: 1,
profile: {
name: 'gildong',
city: 'LA',
age: 32
}
};
let newObj = {
...obj,
profile: {
...obj.profile,
city: 'Seoul'
}
};
console.log(object.profile.city) // LA
console.log(newObj.profile.city) // Seoul
ネストされたデータを拡張演算子(deepcopy)newObjectにコピーします.profile.city=「ソウル」に変更されたが、対象は変わっていない.ソース:
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Spread_syntax
Reference
この問題について(TIL [Spread Operator]), 我々は、より多くの情報をここで見つけました https://velog.io/@dlrbwls0302/TIL-uyxjdy1gテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol