2012-10-17 2 views
1

가능한 중복 :
Why does (‘0’ ? ‘a’ : ‘b’) behave different than (‘0’ == true ? ‘a’ : ‘b’)Javascript에서 부울 평가 규칙이란 무엇입니까?

나는 현재 자바 스크립트를 배우고 지금까지 언어에 대해 기쁘게 생각하고 있습니다.

오늘 아침에 테스트를 작성할 때, 내가 뭔가를 깨달았다 내가 설명 할 수 없다 :

부울 표현식을 평가할 때, 우리는이 :

// a && b returns b in case a && b are evaluated to true: OK 
'2' && '3' => '3' 
'3' && '2' => '2' 

// a && b returns a in case a is evaluated to false, b otherwise: OK 
false && '' => false 
'' && false => '' 

// '' and '0' are evaluated to false in a boolean context: OK 
'' == false => true 
'0' == false => true 

// Here is the "problem": 
'' && '0' => '' // To be expected: both operands evaluate to false 
'0' && '' => '' // What ?!! 

그래서 제 질문은 간단하다 : '0' && '' 수익을 수행하는 이유 ''?

두 피연산자 모두 false로 평가 될 것으로 예상되지만 그 문맥은 '0' 인 것으로 보입니다. 왜 그렇습니까?

+0

MDN은 좋은 설명을 제공하는 것 : https://developer.mozilla.org/en-US/docs/JavaScript/를 참조/연산자/Logical_Operators. 'Boolean ('0') == true '입니다. – Blender

+0

@AndreKR : 그 질문은 실제로 내 대답입니다. 링크를 가져 주셔서 감사합니다. 너무 닫히기로 결정했다. – ereOn

+0

[JavaScript 형식 변환 : (true && 1) vs (true | | 1)] (http://stackoverflow.com/questions/8559920/javascript-type-conversion-true-1-vs-true- 1) –

답변

2

''은 거짓 값이고 '0'은 거짓 값이 아닙니다.

(가 true를 돌려 있도록 '0' == false== 시도하는 유형 변환을 수행합니다.)

+0

그럼'=='을 사용할 때 "false가 아닌"값이'false'로 평가됩니까? – ereOn

+0

당신은 이것을 알고 있습니다 만, 장래의 독자를 위해서,'=='연산자에 의한 비교를 위해서 양쪽 모두가 수치로 변환되기 때문에'0 '== false'가'true'이므로 비교가'0 == 0'. –

관련 문제