2017-10-26 14 views
6

내 반응 App을 개발하는 동안 구성 요소에 조건부 소품을 보내야하므로 패턴이 어딘가에 있음을 알 수 있었지만 실제로 이상하게 보였습니다. 왜 효과가 있었습니까.Javascript ES6 스프레드 연산자가 정의되지 않음

I 입력하는 경우 : 미정 개체 내부에있을 때, 빈 객체가 반환되지만 확산 연산자가 정의되지 않은 에러를 활성화

console.log(...undefined) // Error 
console.log([...undefined]) // Error 
console.log({...undefined}) // Work 

가 상승한다.

나는이 행동과 관련하여 매우 놀랐다. 실제로 그것이 어떻게되어야하는지, 나는 이것을 의지 할 수 있는가?

+0

Iterator에 의존하는 것은 그 값들에 대해 필요한 메소드를 구현할 방법이 없기 때문에'null' 또는'undefined'로 던질 것입니다. 왜 객체가 문법을 전파하는지 모르겠습니다. – llama

+0

생각해 보니, 객체의 문자 확산 구문이 실패하지 않는다고 생각합니다. 확산되는 것이 다른 일반 객체이기 때문에 기본적으로 반복자가 아니기 때문에 거의 예외를 만들어야합니다. 그 사건. – llama

+0

'{... undefined}'이것은 Babel과 함께 컴파일되지 않기 때문에 내가 쓰는 것이 아닙니다. – Keith

답변

3

이 문제는 확산 옵션 같은 일을하는 데 유용합니다 :

function foo(options) { 
    const bar = { 
    baz: 1, 
    ...(options && options.bar) //options and bar can be undefined 
    } 
} 

을 그리고 stage-1에있는 더 나은 optional chaining로 가져옵니다

function foo(options) { 
    const bar = { 
    baz: 1, 
    ...options?.bar //options and bar can be undefined 
    } 
} 

생각 : 그 너무 나쁘다. 배열로 퍼지기 위해서도 작동하지 않는다.