나는 종종 다음과 같은 예를 본다 :
코드 사본은 다음과 같습니다.
var a;
var b = !! a;
A는 기본적으로 정의되지 않습니다. ! a는 참입니다. !! a는 거짓이므로 b의 값은 거짓, 더 이상 정의되지 않은 다른 값이나 다른 값은 주로 후속 판단을위한 편의를 제공합니다.
!!
JavaScript는 약한 유형 언어 (변수는 고정 데이터 유형이 없음)이므로 때로는 다음과 같은 해당 유형으로 캐스트해야합니다.
코드 사본은 다음과 같습니다.
a = parseint ( "1234")
a =”1234 ″ -0 // 숫자로 변환합니다
b = 1234+”// 문자열로 변환합니다
c = someObject.toString () // 객체를 문자열로 변환합니다
그중 첫 번째와 네 번째는 명시적인 전환이며 2와 3은 암시 적 변환입니다.
부울 전환, JavaScript 컨벤션 규칙입니다
거짓, 정의되지 않은, null, 0, ""는 거짓입니다
True, 1, "Somestring", [Object]는 참입니다
NULL 및 UNDEFINED와 같은 다른 암시 적으로 변환 된 값의 경우, 운영자는 실제 결과를 생성하므로 두 가지 느낌표를 사용하는 것은 이러한 값을 "동등한"부울 값으로 변환하는 것입니다.
다시 한번 봅시다 :
코드 사본은 다음과 같습니다.
var foo;
Alert (! foo); // undifined 케이스에서는 느낌표가 참으로 반환됩니다.
경고 (! goo); // null의 경우 느낌표의 반환도 사실입니다.
var o = {flag : true};
var test = !! O.flag; // var test = o.flag || false와 동일합니다.
경고 (테스트);
이 예제는 미분식과 무효 일 때, 한 느낌표의 반환이 사실이며 두 느낌표 지점의 반환은 거짓이므로, 두 느낌표의 기능은 변수의 값이 명확하게 설정된 경우 (비 null/undifined/0/"및"동등한 값)는 변수의 실제 값을 기준으로 결과가 반환됩니다.