var a = '';
var b = (a) ? false : true; // fixed!
console.log(b); // => true
var가로 b
설정됩니다 true
.
신뢰할 수있는 정의 된 동작입니까?
위의 대답으로, 예 , 그 빈 문자열의 정의 된 동작입니다 조건에서 (AN if
표현, ||
, &&
, ? :
, ...). ( 표준은 내부 ToBoolean 연산을 적용해야 한다고 말합니다 .)
결과가 거의 동일 하더라도 빈 문자열을 비교에 사용하면 평가가 다릅니다 ( Truth, Equality 및 JavaScript 참조 ) .
// conditional (note: evaluation to false prints false here!)
console.log('' ? true : false); // zero length => false
// comparisons
console.log('' == true); // +0 === 1 => false
console.log('' == false); // +0 === +0 => true
console.log('' === true); // different types => false
console.log('' === false); // different types => false
설명 :의 피연산자 때 기본적으로 ==
다른 유형을 가지고, 자바 스크립트가에 따라, 숫자로 변환하기 어려운 시도 값 ( 사용하여 작업을 표준 통화 ToNumber 및 ToPrimitive를 ) 다음 내부적으로 적용됩니다 ===
. 그러나 ===
직접 사용 하는 경우 유형이 변환되지 않으므로 문자열을 부울과 비교하는 것은 항상 false
입니다.
대략적으로 말하면, null이 아닌, 0이 아닌, 비어 있지 않은, 거짓이 아닌 값에 대해 JavaScript 조건부 ( ToBoolean ) 테스트 (빈 문자열은 ... 비어 있고 숫자 -0 또는 +0은 ... 제로 NaN이 정의 된 번호가 아닙니다,하지만 빈 개체) 정말 버리지 분명히, 또는 내가 생각하는 등과 같은 조건문 에 대한 시험 A (참) 것 , 동안 비교 명백한 신중하게 변환 된 값 ( ToPrimitive , ToNumber을 )의 피연산자이며 정확한 동일성을 찾습니다 .==
===
if (X) {} // is X a (true) thing?
if (X == Y) {} // are the values of X and Y same-ish?
if (X === Y) {} // are X and Y exactly the same?
거기에 더 예 진실, 평등 및 자바 스크립트 등이 구별은 정말 중요한, '0'
이다 true
조건에서 (길이가 0이 아닌, 또는 그 일이됩니다 ), 그러나 false
A의 ==
비교합니다 ( 값이 제로). '1'
다시 말하지만 true
두 경우 모두입니다 (사물이며 0이 아닌 값을 가짐).
console.log('' ? true : false); // zero length => false
console.log('' == true); // +0 === 1 => false
console.log('0' ? true : false); // non-zero length => true
console.log('0' == true); // +0 === 1 => false
console.log('1' ? true : false); // non-zero length => true
console.log('1' == true); // 1 === 1 => true
false
여기 에요