2012-05-05 2 views
12

이 두 가지의 차이점은 무엇입니까? 루비에서 사과가 null 인 경우에만 apple ||= walrus 사과를 해마와 같게 만드는 데 익숙합니다. 그것은 JS/CS에서도 동일하게 보입니다.하지만? = 같은 일을하는 것처럼 보입니다."|| ="연산자는 CoffeeScript의 "? ="와 어떻게 다릅니 까?

apple = 0 
walrus = 9 
apple ?= walrus // outputs 0 
apple ||= walrus // outputs 9 

와트

답변

18

가장 좋은 방법은 결과 JS를 보는 것입니다.

커피 스크립트 :

apple = 0 
walrus = 9 
apple ?= walrus // outputs 0 
apple ||= walrus // outputs 9 

자바 스크립트 : 당신이 볼 수 있듯이

var apple, walrus; 
apple = 0; 
walrus = 9; 
if (apple == null) apple = walrus; 
apple || (apple = walrus); 

에서, ?= 명시 적으로 확인 뭔가 null 또는 JS에서 undefined입니다. 이것은 apple이 거짓 값인지 여부에만 의존하는 ||=과 매우 다릅니다.

조금 더 확장하려면 apple ||= walrusapple = apple || walrus과 의미가 동일하므로 사실 인 모든 값은 논리를 단락시키고 사과의 값은 변경하지 않습니다.

+0

마지막 줄을 통해 이해할 수있었습니다. 고맙습니다. – Chris

+0

@Chris 도움이되어 기쁩니다. – loganfsmyth

+2

(캐주얼 리더의 경우 :'undefined == null'은 JavaScript에서 true이고 'null', 두 개의 false-y 값은'x'의 * only * 값으로'x == null '이됩니다. '사실입니다.) –

3

?=존재 연산자 : 나 한테 무슨 혼란을하는 것은 이것이다. nullundefined을 확인합니다.

||= 그냥 "false"가 아닌지 확인합니다. 그렇다면 0은 false입니다.

관련 문제