>웹 프론트엔드 >JS 튜토리얼 >ES6 학습 변수 분해 및 할당

ES6 학습 변수 분해 및 할당

高洛峰
高洛峰원래의
2017-02-15 16:55:231228검색

가끔은 너무 많은 변수를 작성하는 것이 정말 귀찮고 지루하고 거의 반복적인 작업이 많습니다. es6에서는 변수를 선언하고 변수를 할당하는 등 더욱 편리한 다양한 방법을 제공합니다. 다음 글에서는 ES6의 변수 구조해제와 할당에 관한 관련 정보를 주로 소개합니다. 도움이 필요한 친구들이 참고할 수 있습니다.

변수 구조 분해 할당

ES6에서는 특정 패턴과 변수 할당에 따라 배열과 객체에서 추출이 가능합니다.

배열의 구조 분해 할당

var [a,b,c] = [1,2,3];
a // 1;
b // 2;
c // 3;

위 코드는 배열에서 값을 추출하여 변수에 할당할 수 있음을 나타냅니다. 해당 위치.

본질적으로 이런 작성 방식은 "패턴 매칭"입니다. 등호 양쪽의 패턴이 동일한 한 왼쪽의 변수에 해당 값이 할당됩니다.

let [foo,[[bar],baz]] = [1,[[2],3]];
foo //1;
bar //2;
baz //3;

let [,,third] = ['foo','bar','baz'];
third //'baz'

let [head,...tail] = [1,2,3,4]
head //1;
tail //[2,3,4]

구조 분해에 실패하면 변수 값은 정의되지 않은 값이 됩니다.

let [x,y,z] = ['a']
x // 'a';
y // undefined
z //[]

불완전한 분해

등호 왼쪽의 패턴이 배열의 일부에만 일치하는 경우 등호 오른쪽에 있는 구조 분해는 여전히 성공할 수 있습니다. 이 상황을 불완전 분해라고 합니다.

let [x,y] = [1,2,3]
x //1
y //2

등호 오른쪽이 배열이 아닌 경우 오류가 발생합니다. (횡단 가능한 구조가 없습니다).

특정 데이터 구조에 Iterator 인터페이스가 있는 한 배열 형태의 구조 분해 할당을 사용할 수 있습니다

function* fibs(){
 var a = 0;
 var b = 1;
 while(true){
  yield a;
  [a,b] = [b,a+b];
 }
}

var [first,second,third,fourth,fifth,sixth] = fibs();
sixth // 5

fibs는 기본적으로 Iterator 인터페이스가 있는 생성기 함수, 구조 분해 할당은 이 인터페이스에서 값을 차례로 가져옵니다.

기본값

구조 분해 할당을 사용하면 기본값을 지정할 수 있습니다.

var [foo=true] = [];
foo //true

ES6은 내부적으로 엄격한 동등 연산자(===)를 사용하여 위치에 값이 있는지 확인합니다. 따라서 배열 멤버가 정의되지 않음과 엄밀히 동일하지 않으면 기본값이 적용되지 않습니다.

var [x = 1] = [undefined]
x // 1

var [x = 1] = [null]
x // null

표현식을 기본값으로 사용할 수도 있습니다. 표현식은 지연 평가되며 다음과 같은 경우에만 사용됩니다. 그 가치는 때가 되면 평가될 것이다.

function f(){
 console.log('aaa')
}

let [x = f()] = [1]

위 코드에서는 x가 값을 얻을 수 있으므로 함수 f는 실행되지 않습니다.

기본값은 구조분해 할당의 다른 변수를 참조할 수 있으나 해당 변수가 선언되어 있어야 합니다.

객체의 구조 분해 할당

구조 분해 할당은 객체뿐만 아니라 배열에도 적용할 수 있습니다.

 var {foo,bar} = {foo:'aaa',bar:'bbb'}
 foo // 'aaa'
 bar // 'bbb'

객체와 배열의 구조 분해 할당의 한 가지 차이점은 배열의 요소가 순서대로 정렬되고 변수의 값이 해당 항목에 따라 결정된다는 것입니다. 위치 개체의 속성은 순서가 없으며 올바른 값을 얻으려면 변수의 이름이 속성과 동일해야 합니다.

var {bar,foo} = {foo:'aaa',bar:'bbb'}
foo //'aaa'
bar //'bbb'


var {baz} = {foo:'aaa',bar:'bbb'}
baz //undefined

변수 이름이 속성 이름과 일치하지 않는 경우 다음과 같이 작성해야 합니다.

var {foo:baz} = {foo:'aaa'}
baz //'aaa'

사실 객체의 구조 분해 할당은 다음 형식의 약어입니다.

var {foo:foo,bar:bar} = {foo:'aaa',bar:'bbb'}

객체의 구조 분해 할당의 내부 메커니즘 객체는 먼저 동일한 이름을 가진 속성을 찾은 다음 해당 변수에 할당하는 것입니다. 해당 변수의 경우 실제로 값이 할당되는 것은 전자가 아니라 후자입니다.

단, 위 작성방법을 사용하는 경우 변수의 선언과 할당이 함께 이루어집니다. let과 const의 경우 변수를 다시 선언할 수 없으므로 이전에 할당된 변수를 한 번 선언하면 오류가 발생합니다.

객체 해체는 중첩된 객체에도 사용할 수 있습니다.

var obj = {
 p: [
  'hello' ,
  {
   y : 'world'
  }
 ]
}

var {p:[x,{y}]} = obj

x //'hello'
y //'world'

이때 p는 변수가 아닌 패턴이므로 값이 할당되지 않습니다.

객체의 구조 분해 할당은 기본값을 지정할 수도 있습니다. 기본값의 유효 조건은 객체의 속성 값이 정의되지 않음과 동일하다는 것입니다.

var {x=3} = {x:undefined}
x //3

var {x=3} = {x:null}
x //null

구조 분해 모드가 중첩 객체이고 하위 객체가 위치한 상위 속성이 없으면 오류가 보고됩니다.

var {foo:{bar}} = {baz:'baz'}

ES6 학습의 변수 구조 분해 및 할당과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.