자바 스크립트에서
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
설명 :의 피연산자 때 기본적으로 ==
다른 유형을 가지고, 자바 스크립트가에 따라, 숫자로 변환하기 어려운 시도 값 ( 사용하여 작업을 표준 통화 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
답변
var b
로 설정됩니다 true
. 빈 문자열은 다른 값과 마찬가지로 JavaScript에서 ‘falsey’값으로 계산되기 때문입니다.
잘못된 값 은 http://www.sitepoint.com/javascript-truthy-falsy/ 를 참조하십시오.