2017-02-28 7 views
3

이전에이 구문을 보았습니다. 조건이 true 인 경우 수행 할 작업이있는 곳에서 이런 식으로 작성했습니다.활자체 (조건부 && 액션)는 타이프 스크립트 란 무엇입니까?

() => void (x === 0 && this.setZero()) 

x === 0 && this.setZero()을 무효로 처리합니까? 이 패턴의 이름은 무엇입니까?

Void는 undefined를 반환하지만 this.setZero()이 undefined를 반환하는 이유는 무엇입니까?

() => x === 0 && this.setZero() 

두 가지 모두 유효합니다. 그냥 무방비로 포장하고 있습니까?

답변

3

이것은 자바 스크립트 일뿐입니다.

void은 매우 이상한 JavaScript 연산자입니다. 피연산자를 평가 한 결과 undefined이 결과로 나타납니다. 그래서

() => void (x === 0 && this.setZero()) 

... 항상 this.setZero() (x === 0 경우)를 호출의 가능한 부작용으로, undefined을 반환 화살표 기능입니다.

왜 무효에 X의 === 0 & & this.setZero()를 포장 하는가?

오히려 false을 돌아보다 기능 항상 반환 undefined을하도록 (x === 0true 경우) 또는 this.setZero()의 결과 (x === 0이 false 인 경우).

이 패턴의 이름은 무엇입니까?

특별히 하나는 없다고 생각합니다.

귀하의 () => x === 0 && this.setZero() 대체품은 false 또는 this.setZero()의 결과를 반환합니다.

난 그냥

() => void (x === 0 && this.setZero()) 

당신이 return를 사용하지 않는 한 자세한 화살표 기능이 아무것도 반환하지 않기 때문에

() => { x === 0 && this.setZero(); } 

는 않습니다 정확히 않습니다 것입니다; 또 다른 대안은 다음과 같습니다

() => { if (x === 0) this.setZero(); } 
+0

이 여기에 사용될 수있는 이유는이 화살표 함수는 약속을 계속에 사용되는 가능성, 그리고 개발자가 특별히 *하지 * 돌아가려면 않습니다 설명하기 위해 하나 'FALSE'또는 'this.setZero()'의 결과를 얻지 만, 단순히 약속/약속을 지키지 않아도된다. 'void '는이 결과를 얻기위한 매우 간단한 방법입니다. – cdhowie

+0

@cdhowie : Heh, 방금 추가 했었지만 (약속 비트가 아닙니다). 'void '는이 경우에는 장황한 화살표보다 작기 때문에주의하십시오. –

+2

소형이지만 분명히 혼란 스럽습니다. 코드를 혼동하면 버그 및 유지 관리 문제가 발생합니다.장황하게하고 minifier가 그들의 일을하게하는 것이 좋습니다. –