let a = 1; let b = 2; [a, b] = [b, a]; console.log(a, b); // 2, 1
기존에는
temp
처럼 교환에 필요한 변수를 하나 선언해서 두 값을 서로 바꿨는데 비구조화 할당을 이용해 쉽게 바꿀 수 있다.
const obj = { age: undefined, name: null, grade: 'A' }; const { age = 0, name = 'noName', grade = 'F' } = obj; console.log(age, name, grade); // 0, null, A
객체를 비구조화 할당할 때, 현재 값이
null
이면 기본값 정의를 해도
기본값이 들어가지 않는다. 반면undefined
는 가능.
function f() { console.log('함수f 실행'); return 0; } const obj = { age: 21, grade: 'A'}; const { age = f(), grade } = obj; // '함수f 실행' 출력 안됨 console.log(age); // 21
기본값으로 함수의 리턴값을 넣어 줄 수도 있다.
그런데 지금같은 경우age
의 값이 있어서 비구조화 할당시 기본값인 함수f
가 호출 되지 않는다.
const obj = {}; const arr = []; ({ a: obj.a, b: arr[0] } = { a: 123, b: 456 }); console.log(obj, arr) // { a: 123 }, [ 456 ]
객체 비구조화 할당을 하면서 이름을 변경할 때, 다른 객체나 배열을 써주면 객체나 배열에 값을 추가할 수 있다.