여기가 비어 있지 않은 문자열에 관한 흥미로운 일에만 공백 문자 : 당신이 ==
비교를하고, 값 중 하나가 비교되는 경우이 숫자 나 때문에
!!" "; // true
" " == true; // false
입니다 부울 값이면 다른 값을 숫자로 변환하려고 시도합니다.
다른 결과를 얻는 이유는 공백 만있는 문자열이 0
(또는 false)으로 변환되는 반면 공백 만있는 문자열은 !!
을 통해 부울로 변환되는 것은 비어 있지 않은 문자열로 간주되며 그러므로 true
.
그래서 :
var x = " ";
alert(!x); // false
alert(x == 0); // true
편집 : 아마
기억해야 할 중요한 것은 숫자를 비교 또는 비 숫자 유형 부울 때, ==
이 toNumber 변환을 사용한다는 것입니다 가능하다면 !
은 에서부터 부울까지의 변환을 사용합니다. 항상 같은 것은 아닙니다.
의 결과를 을 사용하여으로 변환하는 것이 쉽습니다.
alert(!![]); // true
그러나 ==
를 사용할 때 정말 toNumber 변환의 결과를 볼 수 없습니다 : 마찬가지로.
단 +
을 사용하면 에서으로 변환하는 결과를 볼 수 있습니다. 마찬가지로 : 나는 무슨 일이 배열의 경우에 일어나는 것을 확신
alert(+[]); // 0
, 그것은 먼저 toString
전화를 가져옵니다이다. 따라서 :
// ---------------------toString result-------toNumber result (from string)
alert(+[]); // "" 0
alert(+[""]); // "" 0
alert(+[" "]); // " " 0
alert(+[0]); // "0" 0
alert(+["0"]); // "0" 0
alert(+["3"]); // "3" 3
alert(+[3,4]); // "3,4" NaN
아마도 (x == true) 또는 라인을 따르는 무언가가 0이면 false를 의미합니다. – Raynos
당신은'if (!x)'및'if (x == 0)'? –