code

var없이 객체 분해

codestyles 2020. 10. 19. 08:05
반응형

var없이 객체 분해


var앞에 키워드 가없는 경우 객체 구조화에서 오류가 발생하는 이유는 무엇 입니까?

{a, b} = {a: 1, b: 2};

던지다 SyntaxError: expected expression, got '='

다음 세 가지 예는 문제없이 작동합니다.

var {a, b} = {a: 1, b: 2};
var [c, d] = [1, 2];
    [e, f] = [1, 2];

보너스 질문 : 왜 var배열 분해를 위해 필요하지 않습니까?

나는 같은 일을하는 문제에 부딪쳤다.

function () {
  var {a, b} = objectReturningFunction();

  // Now a and b are local variables in the function, right?
  // So why can't I assign values to them?

  {a, b} = objectReturningFunction();
}

이 문제 {...}는 JavaScript에서 여러 의미를 갖는 연산자 로 인해 발생 합니다.

때, {a의 시작 부분에 나타납니다 성명 , 그것은 항상 표현 것이다 블록 에 할당 할 수 없습니다. 나중에 Statement as an Expression으로 표시되면 Object를 나타냅니다.

그룹화 괄호 처럼 Statementvar 뒤에 올 수 없기 때문에 이러한 구분을 하는 데 도움이 됩니다 .

( {a, b} = objectReturningFunction() );

문서에서 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Assignment_without_declaration

참고 : 선언없이 객체 리터럴 비 구조화 할당을 사용할 때 할당 문을 괄호 (...)로 묶어야합니다.

{a, b} = {a : 1, b : 2}는 유효한 독립형 구문이 아닙니다. 왼쪽의 {a, b}는 개체 리터럴이 아닌 블록으로 간주되기 때문입니다.

그러나 ({a, b} = {a : 1, b : 2})는 유효하며 var {a, b} = {a : 1, b : 2}

(...) 표현식 앞에 세미콜론이 와야하거나 이전 행에서 함수를 실행하는 데 사용될 수 있습니다.


세미콜론없이 자바 스크립트를 작성하는 경우 예상대로 작동하려면 '선언없는 할당'구문 앞에 세미콜론이 있어야합니다.

let a, b

;({a, b} = objectReturningFunction()) // <-- note the preceding ;

나를 잡았을 때 이것을 강조하고 싶었고 다른 사람들이 왜 작동하지 않는지 및 / 또는 코드 포맷터 등으로 이상한 결과를 생성하는 데 시간을 절약 할 수 있기를 바랍니다.

실제로 허용되는 답변 (인용 된 문서의 마지막 줄)에 실제로 있지만 놓치기 쉽습니다. 특히 예제를 보지 않고는 더욱 그렇습니다!

참고 URL : https://stackoverflow.com/questions/27386234/object-destructuring-without-var

반응형