[javascript] 자바 스크립트에서 빈 문자열은 항상 부울로 거짓입니까?

자바 스크립트에서

var a = '';
var b = (a) ? true : false;

var b로 설정됩니다 false.

신뢰할 수있는 정의 된 동작입니까?



답변

예. Javascript는 ECMAScript의 방언이며 ECMAScript 언어 사양은이 동작을 명확하게 정의합니다.

부울

인수가 빈 문자열 인 경우 (길이가 0 인 경우) 결과는 false입니다. 그렇지 않으면 결과는 사실이다

http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf 에서 인용


답변

예. 모든 false, 0빈 문자열 ''"", NaN, undefined, 그리고 null언제나처럼 평가된다 false; 다른 모든 것입니다 true.

그리고 귀하의 예에서, b는 false평가 후입니다. (잘못 쓴 것 같아요 true)


답변

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

설명 :의 피연산자 때 기본적으로 ==다른 유형을 가지고, 자바 스크립트가에 따라, 숫자로 변환하기 어려운 시도 ( 사용하여 작업을 표준 통화 ToNumberToPrimitive를 ) 다음 내부적으로 적용됩니다 ===. 그러나 ===직접 사용 하는 경우 유형이 변환되지 않으므로 문자열을 부울과 비교하는 것은 항상 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이 아닌, 또는 그 일이됩니다 ), 그러나 falseA의 ==비교합니다 ( 값이 제로). '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


답변

var b로 설정됩니다 true. 빈 문자열은 다른 값과 마찬가지로 JavaScript에서 ‘falsey’값으로 계산되기 때문입니다.

잘못된 값 은 http://www.sitepoint.com/javascript-truthy-falsy/참조하십시오.


답변

false로 변환 될 수있는 표현식의 예는 널, 0, 빈 문자열 ( “”) 또는 정의되지 않은 것으로 평가되는 표현식입니다. ( MDN 참조 참조 )


답변