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() );
참고 : 선언없이 객체 리터럴 비 구조화 할당을 사용할 때 할당 문을 괄호 (...)로 묶어야합니다.
{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
'code' 카테고리의 다른 글
Powershell : 스크립트에 오류가 표시되지 않도록하려면 어떻게해야합니까? (0) | 2020.10.19 |
---|---|
Dapper 쿼리에 대한 인수를 동적으로 만드는 방법 (0) | 2020.10.19 |
sudo로도 / usr / bin 내부에 심볼릭 링크를 만들 수 없습니다. (0) | 2020.10.19 |
DIFF 유틸리티는 2 개의 파일에 대해 작동합니다. (0) | 2020.10.19 |
catch 후 코드 대신 finally를 사용하는 이유 (0) | 2020.10.19 |