수색…


소개

Destructuring은 최근에 EcmaScript 6에서 Javascript에 추가 된 패턴 일치 기술입니다.

패턴의 오른쪽과 왼쪽에 일치 할 때 변수 그룹을 해당 값 세트에 바인딩 할 수 있습니다.

통사론

  • 하자 [x, y] = [1, 2]
  • [첫째, ... 휴식] = [1, 2, 3, 4]
  • [one, three] = [1, 2, 3]
  • 하자 [발 = '기본 값'] = []
  • {a, b} = {a : x, b : y}
  • {a : {c}} = {a : {c : '중첩 된'}, b : y}
  • {b = '기본 값'} = {a : 0}

비고

ECMAScript 6 (AKA ES2015) 사양에서는 destructuring이 새로 추가되었으며 브라우저 지원 이 제한 될 수 있습니다. 다음 표는 사양의 75 % 이상을 지원하는 브라우저의 가장 초기 버전에 대한 개요를 제공합니다.

크롬 가장자리 Firefox 인터넷 익스플로러 오페라 원정 여행
49 13 45 엑스 36 엑스

(최종 업데이트 - 2016/08/18)

함수 인자의 소멸

함수에 전달 된 객체에서 속성을 가져옵니다. 이 패턴은 인수 위치에 의존하는 대신 명명 된 매개 변수를 시뮬레이트합니다.

let user = {
    name: 'Jill',
    age: 33,
    profession: 'Pilot'
}    

function greeting ({name, profession}) {
    console.log(`Hello, ${name} the ${profession}`)
}

greeting(user)

이것은 배열에서도 작동합니다.

let parts = ["Hello", "World!"];

function greeting([first, second]) {
    console.log(`${first} ${second}`);
}

소멸시 변수 이름 바꾸기

Destructuring을 사용하면 객체의 한 키를 참조 할 수 있지만 다른 이름을 가진 변수로 선언 할 수 있습니다. 구문은 일반적인 JavaScript 객체의 키 - 값 구문과 비슷합니다.

let user = {
  name: 'John Smith',
  id: 10,
  email: '[email protected]',
};

let {user: userName, id: userId} = user;

console.log(userName) // John Smith
console.log(userId) // 10

배열 소멸

const myArr = ['one', 'two', 'three']
const [ a, b, c ] = myArr

// a = 'one', b = 'two, c = 'three'

소멸 배열에서 기본값을 설정할 수 있습니다. 소멸 중 기본값 의 예를 참조하십시오.

소멸 배열을 사용하면 2 개의 변수 값을 쉽게 바꿀 수 있습니다.

var a = 1;
var b = 3;

[a, b] = [b, a];
// a = 3, b = 1

빈 슬롯을 지정하여 불필요한 값을 건너 뛸 수 있습니다.

[a, , b] = [1, 2, 3] // a = 1, b = 3

객체 파괴하기

파괴는 객체에서 객체로 속성을 추출하는 편리한 방법입니다.

기본 구문 :

let person = {
  name: 'Bob',
  age: 25
};

let { name, age } = person;

// Is equivalent to
let name = person.name; // 'Bob'
let age = person.age;   // 25

파괴 및 이름 바꾸기 :

let person = {
  name: 'Bob',
  age: 25
};

let { name: firstName } = person;

// Is equivalent to
let firstName = person.name; // 'Bob'

기본값으로 파괴 :

let person = {
  name: 'Bob',
  age: 25
};

let { phone = '123-456-789' } = person;

// Is equivalent to
let phone = person.hasOwnProperty('phone') ? person.phone : '123-456-789'; // '123-456-789'

기본값을 사용하여 이름 바꾸기 및 이름 바꾸기

let person = {
  name: 'Bob',
  age: 25
};

let { phone: p = '123-456-789' } = person;

// Is equivalent to
let p = person.hasOwnProperty('phone') ? person.phone : '123-456-789'; // '123-456-789'

내부 변수 파괴하기

객체를 함수 인자로 분리하는 것 외에도 변수 선언 내에서 다음과 같이 사용할 수 있습니다.

const person = {
  name: 'John Doe',
  age: 45,
  location: 'Paris, France',
};

let { name, age, location } = person;

console.log('I am ' + name + ', aged ' + age + ' and living in ' + location + '.');
// -> "I am John Doe aged 45 and living in Paris, France."

보시다시피 세 가지 새로운 변수가 만들어졌습니다 : name , agelocation 와 그 값은 키 이름과 일치하는 경우 개체 person 에게서 부여받습니다.

나머지 매개 변수를 사용하여 인수 배열 만들기

여러분이 특별히 선언 한 것과는 별도로 추가 인수로 구성되는 배열이 필요한 경우 인수 선언 내에 array rest 매개 변수를 다음과 같이 사용할 수 있습니다.

예제 1, 배열에 대한 선택적 인수 :

function printArgs(arg1, arg2, ...theRest) {
  console.log(arg1, arg2, theRest);
}

printArgs(1, 2, 'optional', 4, 5);
// -> "1, 2, ['optional', 4, 5]"

예제 2에서 모든 인수는 이제 배열입니다.

function printArgs(...myArguments) {
  console.log(myArguments, Array.isArray(myArguments));
}

printArgs(1, 2, 'Arg #3');
// -> "[1, 2, 'Arg #3'] true"

myArguments 가 Array이기 때문에 콘솔이 true를 인쇄했습니다 ...myArguments 매개 변수 arguments 선언 내의 ...myArguments 는 쉼표로 구분 된 함수 (매개 변수)에서 얻은 값 목록을 완전한 기능의 배열로 변환합니다 (Array와 유사한 객체가 아닙니다). 네이티브 인수 객체와 같이).

파괴 중 기본값

추출하려고하는 속성이 개체 / 배열에 존재하지 않아 TypeError (중첩 된 개체를 소멸시키는 중) 또는 undefined 개체로 설정되는 상황이 자주 발생합니다. 파괴하는 동안 우리는 기본값을 설정할 수 있습니다. 기본값은 오브젝트에서 발견되지 않는 경우 폴백됩니다.

var obj = {a : 1};
var {a : x , b : x1 = 10} = obj;
console.log(x, x1); // 1, 10
 
var arr = [];
var [a = 5, b = 10, c] = arr;
console.log(a, b, c); // 5, 10, undefined

중첩 된 소멸

우리는 객체 / 배열의 구조를 제한하는 것에 국한되지 않고, 중첩 된 객체 / 배열을 제거 할 수 있습니다.

중첩 된 객체 분해

var obj = {
  a: {
    c: 1,
    d: 3
  },
  b: 2
};

var {
  a: {
    c: x,
    d: y
  },
  b: z
} = obj;

console.log(x, y, z);     // 1,3,2

중첩 배열 소멸

var arr = [1, 2, [3, 4], 5];

var [a, , [b, c], d] = arr;

console.log(a, b, c, d);      // 1 3 4 5

파괴는 단 하나의 패턴에만 국한되지 않고 n 레벨의 중첩으로 배열을 가질 수 있습니다. 마찬가지로 객체를 사용하여 배열을 제거하고 그 반대의 경우도 가능합니다.

객체 내의 배열

var obj = {
  a: 1,
  b: [2, 3]
};

var {
  a: x1,
  b: [x2, x3]
} = obj;

console.log(x1, x2, x3);    // 1 2 3

배열 내의 객체

var arr = [1, 2 , {a : 3}, 4];

var [x1, x2 , {a : x3}, x4] = arr;

console.log(x1, x2, x3, x4);


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow