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 에서 Expression 으로 나타나는 경우 표시되면 Object를 나타냅니다.
var
다음 과 같이 그룹화 괄호 처럼 Statement 뒤에 올 수 없기 때문에이 구분을 하는 데 도움이 됩니다 .
( {a, b} = objectReturningFunction() );
참고 : 선언없이 객체 리터럴 비 구조화 할당을 사용할 때 할당 문 주위의 괄호 (…)가 필요합니다.
{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 ;
나를 잡았을 때 이것을 강조하고 싶었고 다른 사람들이 왜 작동하지 않는지 및 / 또는 다음과 같은 코드 포맷터로 이상한 결과를 생성하는 데 시간을 절약 할 수 있기를 바랍니다. prettier
.
실제로 받아 들여진 답변 (인용 된 문서의 마지막 줄)에 실제로 있지만 놓치기 쉽습니다. 특히 예제를 보지 않고는 그렇습니다!
답변
다른 방법이 있습니다.
let {} = {a, b} = objectReturningFunction()
장점 :
- 괄호가 필요하지 않습니다.
- 세미콜론이 필요하지 않습니다.
- 추가 할당은 보장 된 no-op입니다 (이상한 일이 진행되지 않는 경우)
단점 :
- 제 생각에는
!(){...}()
IIFE 보다 이상하지 않지만 조금 이상해 보입니다 . - 왜 거기에 있는지 혼란 스러울 수 있습니다. 첫 만남에서 사람들을 쫓아내는 것이 보장되므로 일회성으로 사용하지 않는 것이 좋습니다.