var a;
var b=!!a;
a의 기본값은 정의되지 않음입니다. !a는 참이고, !!a는 거짓입니다. 따라서 b의 값은 정의되지 않은 값이나 다른 값이 아닌 거짓입니다. 이는 주로 후속 판단을 용이하게 하기 위한 것입니다.
!! 일반적으로 다음 표현식을 부울 유형 데이터(boolean)로 강제하는 데 사용됩니다. 즉, JavaScript는 약한 유형의 언어이기 때문에
입니다. 고정된 데이터 유형 없음) 따라서 때때로 다음과 같이 해당 유형으로 캐스팅해야 합니다:
a=parseInt(“1234″)
a="1234″-0 // Convert to number
b=1234+”” //문자열로 변환
c=someObject.toString() //객체를 문자열로 변환
여기서 유형 1과 4는 2와 3은 암시적 변환
부울 변환, JavaScript 규칙 규칙은
false, undefine, null, 0, ""는 false
true입니다. 1, "somestring", [Object]는 true입니다
null 및 unundefined와 같은 다른 암시적으로 변환된 값의 경우 ! 연산자는 true 결과를 생성하므로 두 개의 느낌표를 사용하는 목적은 변환하는 것입니다. 이 값을 "동등한" 부울 값으로 변환
============================== ================================================= =========================
간단한 예를 사용하여 설명하겠습니다.
var o={flag:true };
var test=!!o.flag;//var test=o.flag||false;
alert(test);
null 및 undefed에 ! 연산자를 사용하면 다음과 같습니다. 실제 결과인 두 개의 느낌표를 사용하는 목적은 o의 플래그 값이 명시적으로 설정된 경우(null/정의되지 않음/0""/등이 아님) 당연히 테스트가 o.flag와 동일한 값을 사용한다는 것입니다. ; 설정되지 않은 경우 테스트는 기본적으로 null 또는 정의되지 않은 false로 설정됩니다.
jQuery의 전형적인 예는 다음과 같습니다: (jQuery 1.7.0.js: Line 748)
grep: function( elems, callback, inv ) {
var ret = [], retVal;
inv = !!inv;
// 배열을 살펴보고, 유효성 검사 함수를 전달하는 항목만 저장
//
for ( var i = 0, length = elems.length; i retVal = !!callback( elems[ i ], i );
if ( inv !== retVal ) {
ret.push( elems[ i ] );
}
}
return ret;
}
grep 함수 사용 시 세 번째 매개변수가 주어지고 null/undefine/0""/etc 값이 아닌 경우. 이면 inv는 참이고, 그렇지 않으면 거짓입니다. 이것의 목적은 후속 판단을 용이하게 하기 위해 inv 및 retVal의 값을 다른 값이 아닌 true/false에서만 가져올 수 있도록 하는 것입니다.