TIL - 13 | Rest parameter, Spread syntax
20447 ワード
Rest parameter
これは、パラメータを使用するために
function foo(...rest) {
console.log(Array.isArray(rest)); // true
console.log(rest); // [ 1, 2, 3, 4, 5 ]
}
foo(1, 2, 3, 4, 5);
function bar(param1, param2, ...rest) {
console.log(param1); // 1
console.log(param2); // 2
console.log(rest); // [ 3, 4, 5 ]
}
bar(1, 2, 3, 4, 5);
restパラメータはパラメータ個数が可変関数の場合に役立ちます!ArgumentsオブジェクトVS Restパラメータ
function getAllParamsByRestParameter(...args) {
return args;
}
function getAllParamsByArgumentsObj() {
return arguments;
}
const restParams = getAllParamsByRestParameter('first', 'second', 'third');
const argumentsObj = getAllParamsByArgumentsObj('first', 'second', 'third');
console.log(typeof restParams) // object
console.log(typeof argumentsObj) // object
console.log(Array.isArray(restParams)) // true
console.log(Array.isArray(argumentsObj)) // false
console.log(Object.keys(argumentsObj)) // ["0", "1", "2"])
console.log(Object.values(argumentsObj)) // ['first', 'second', 'third']
Spread syntax
function foo(x, y, z) {
console.log(x); // 1
console.log(y); // 2
console.log(z); // 3
}
const arr = [1, 2, 3];
foo(...arr); // Array를 매개변수로 전달.
function foo(param, ...rest) {
console.log(param); // 1
console.log(rest); // [ 2, 3 ]
}
foo(1, 2, 3);
function bar(x, y, z) {
console.log(x); // 1
console.log(y); // 2
console.log(z); // 3
}
bar(...[1, 2, 3]);
配列での展開構文の使用
var arr = [1, 2, 3];
var copy = arr.slice();
console.log(copy); // [ 1, 2, 3 ]
// copy를 변경한다.
copy.push(4);
console.log(copy); // [ 1, 2, 3, 4 ]
// arr은 변경되지 않는다.
console.log(arr); // [ 1, 2, 3 ]
const arr = [1, 2, 3];
const copy = [...arr];
console.log(copy); // [ 1, 2, 3 ]
copy.push(4);
console.log(copy); // [ 1, 2, 3, 4 ]
// arr은 변경되지 않는다.
console.log(arr); // [ 1, 2, 3 ]
let arr1 = [0, 1, 2];
let arr2 = [3, 4, 5];
arr1 = [...arr1, ...arr2];
console.log(arr1) // [0, 1, 2, 3, 4, 5]
オブジェクトでの展開構文の使用
let obj1 = { foo: 'bar', x: 42 };
let obj2 = { foo: 'baz', y: 13 };
let clonedObj = { ...obj1 };
let mergedObj = { ...obj1, ...obj2 };
console.log(clonedObj) // {foo: "bar", x: 42}
console.log(mergedObj) // {foo: "baz", x: 42, y: 13}
console.log(clonedObj === obj1) // false
次に、浅いコピーとdeepcopyについて説明します.Reference
この問題について(TIL - 13 | Rest parameter, Spread syntax), 我々は、より多くの情報をここで見つけました https://velog.io/@daekuenhan/TIL-12-Rest-parameter-Spread-syntaxテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol