es6에서 구조 분해란 특정 패턴에 따라 배열과 객체에서 값을 추출하고 변수에 값을 할당하는 행위를 의미하며 분해 방법인 객체 구조, 배열 구조 분해 및 혼합 구조 분해가 포함됩니다. 데이터 구조를 프로세스의 더 작은 부분으로 나누어 정보 추출 목적을 단순화합니다.
이 튜토리얼의 운영 환경: Windows 10 시스템, ECMAScript 버전 6.0, Dell G3 컴퓨터.
구조 분해: Baidu Encyclopedia는 구조 분해를 의미합니다. ES6에서는 배열과 객체에서 값을 추출하고 특정 패턴에 따라 변수에 값을 할당할 수 있습니다.
개발에서 가장 일반적인 것에는 객체 구조 분해, 배열 구조 분해, 혼합 구조 분해가 있습니다. 이는 정보 추출을 단순화하기 위해 데이터 구조를 더 작은 부분으로 나누는 프로세스입니다.
객체에서 값을 가져오는 전통적인 방법
let node = { type: 'Identifier', name: 'foo' } console.log(node.type) // Identifier console.log(node.foo) // foo
Destructuring 사용
let node = { type: 'Identifier', name: 'foo' } let { type, name } = node console.log(type) // Identifier console.log(name) // foo
지정된 지역 변수 이름이 객체에 존재하지 않으면 지역 변수에 정의되지 않은 값이 할당됩니다.
let { type, name, value } = node console.log(type) // Identifier console.log(name) // foo console.log(value) // undefined
지정된 속성이 존재하지 않는 경우 존재하지 않는 속성에 대해 기본값을 정의할 수 있습니다.
let { type, name, value = true } = node console.log(type) // Identifier console.log(name) // foo console.log(value) // true
구조화 및 할당을 위한 새 변수 이름을 지정합니다.
let arr = { six: '男', age: 19 } let {six:newSix, age:newAge} = arr console.log(six, age) // six is not defined console.log(newSix, newAge) // 男 19
위에서 이상하다고 생각하시나요? 객체 할당에는 왼쪽에 4개의 속성이 있고 오른쪽에 4개의 속성이 값입니다. 하지만 구조 분해에서는 오른쪽이 속성이고 왼쪽이 값이므로 새 변수 이름이 오른쪽에 있습니다.
let, var 또는 const를 사용하여 객체를 분해하는 경우 분해된 객체의 값이 존재하지 않아야 합니다.
var, let, const 할당을 사용하지 않는 경우 구조 분해 문을 ()로 래핑해야 합니다.
({type, name} = node);//{}는 js에서 코드 블록으로 사용됩니다. 등호만 있으면 오류가 보고됩니다
중첩 객체 구조 분해
객체 중첩 객체에서 구조 분해를 수행하려면 구조 분해의 첫 번째 수준에서 계속 중괄호를 사용하여 다음 단계로 드릴다운하여 살펴보겠습니다. 밤나무 먼저:
let node = { type: "Identifier", name: "foo", loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 4 } } }
위는 중첩된 객체 노드입니다. 먼저 첫 번째 레이어를 분해해 보겠습니다
let { loc, type, name } = node // {} Identifier foo
. 우리가 의도적으로 {}의 속성 순서를 혼란스럽게 하여 결과가 여전히 올바르게 출력되는 것을 볼 수 있습니다. 순서에 관계없이 해당 메소드는 이름을 기준으로 해야 함을 짐작할 수 있습니다.
계속해서 두 번째 레이어를 분해하세요
let { loc: { start }} = node; console.log(start.line); // 1 console.log(start.column); // 4
여기서 start를 새로운 사용자 정의 지역 변수에 할당할 수도 있습니다. 이를 newStart
let { loc: { start: newStart }} = node console.log(newStart.line) // 1 console.log(newStart.column) // 4
let colors = [ 'red', 'green', 'blue' ] let [ firstColor, secondColor ] = colors console.log(firstColor) // 'red' console.log(secondColor) // 'green'
let [ , , thirdColor ] = colors console.log(thirdColor) // 'blue'
// ES5中互换值: let a = 1, b = 2, tmp; tmp = a a = b b = tmp console.log(a, b) // 2, 1 // ES6中互换值 let a = 1, b = 2; [ a, b ] = [b, a] console.log(a, b) // 2, 1
let colors = [ 'red', [ 'green', 'lightgreen'], 'blue' ] let [ firstColor, [ secondColor, thirdColor ], fourthColor ] = colors console.log(firstColor) // red console.log(secondColor) // green console.log(thirdColor) // lightgreen console.log(fourthColor) // blue
let colors = [ 'red' ] let [ firstColor, secondColor = 'green' ] = colors console.log(firstColor) // red console.log(secondColor) // green
let colors = [ 'red', 'green', 'blue' ] let [ firstColor, ...restColors ] = colors console.log(firstColosr) // 'red' console.log(restColors.length); // 2 console.log(restColors[0]); // "green" console.log(restColors[1]); // "blue"
var colors = [ "red", "green", "blue" ]; var clonedColors = colors.concat(); console.log(clonedColors); //"[red,green,blue]"
let colors = [ "red", "green", "blue" ]; let [ ...clonedColors ] = colors; console.log(clonedColors); //"[red,green,blue]"
let err = { errors: [ { msg: 'this is a message' }, { title: 'this is a title' } ] }
let { errors } = err let [ firstArr ] = errors let { msg } = firstArr console.log(msg) // 'this is a message' 也可以这样解构 let [ , { title }] = err.errors console.log(title) // 'this is a title' let [{ msg }] = err.errors console.log(msg) // 'this is a message'
let node = { type: "Identifier", loc: { start: { line: 1, column: 1 } }, range: [0, 3] }; let { loc: { start }, range: [ startIndex ] } = node; console.log(start.line); // 1 console.log(start.column); // 1 console.log(startIndex); // 0
// options 上的属性表示附加参数 function setCookie(name, value, options) { options = options || {}; let secure = options.secure, path = options.path, domain = options.domain, expires = options.expires; // 设置 cookie 的代码 } //可以改写为:对options进行解构并赋予默认值 function setCookie(name, value, { secure, path, domain, expires } = {}) { // ... }
위 내용은 es6의 해체는 무엇을 의미합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!