2011-11-09 5 views
3

http://webmail.mac.com 소스를 참조하십시오.사용 목적은 무엇입니까 !! 이러한 상황에서?

B.incompatible = !!(B.msie < 7 || B.safari < 500 || B.mozilla < 1.008000999); 
    B.unsupported = !!(B.opera || B.safari < 500) && !B.incompatible; 
    B.supported = !B.incompatible && !B.unsupported; 

왜 두 번 "!" 여기에 사용됩니까? 어떤 이점이 있습니까?

+0

값을 부울로 변환합니다. –

+2

검색 할 시간이 없으십니까? 또는 당신이 당신의 질문을 쓰고있는 동안, 당신이이 무의미한 복제물을 게시하는 것을 멈추려 고 노력하면서 "관련있는"목록의 상단을 보았습니까? –

+0

http://stackoverflow.com/questions/784929/what-is-the-operator-in-javascript – Irishka

답변

4

어쨌든 표현식은 이미 부울 값으로 평가되므로이 경우 아무런 의미가 없습니다. 아마 프로그래머가 "확실하다".

+0

흠, 나는 B.opera를 놓쳤다.하지만이 경우조차도 전체 표현은 여전히 ​​부울로 평가 될 것이다. 왜냐하면 그 구조 때문에 암시 적으로 강요하는 언어 특성 때문이 아니다. –

+0

예. IMO, '!!'에 대한 유스 케이스는 거의 없다. 문제의 코드는 아마도 내가 본 중에 최악의 사용법 일 것입니다. –

0

bool에 매우 똑똑한 방법입니다.

+2

이 상황에서 bool로 변환되는 것은 무엇입니까? –

2

논리 NOT 연산자 ("!")는 true와 false를 반대로 변환하는 데 사용됩니다.

! true // expresses false 
! false // expresses true 

그러나 값도 강제 변환됩니다. 0이 아닌 수 및 비어 있지 않은 문자열이 참입니다. 그래서 그들은 거짓이됩니다.

! 1.0 // expresses false 
! 0.0 // expresses true 
! '@' // expresses false 
! '' // expresses true 

두 개의 NOT을 사용하면 다시 원래의 부울 값으로 변환됩니다.

!! 1.0 // expresses true 
!! 0.0 // expresses false 
!! '@' // expresses true 
!! '' // expresses false 

부울 생성자를 호출하는 것과 같습니다. 그러나, 더 빠르며 (함수 호출 오버 헤드가 없음), 더 짧고, 더 읽기 쉽습니다.

!! 1.0 === Boolean(1.0) // expresses true 
+0

이 상황에서 어떤 값이 부울로 강제 변환됩니까? –

+0

일반 구문은 변수 값이 부울로 강제 변환되는 "!! value"입니다. –

+0

질문의 코드 표현식은 이미 부울입니다. –

관련 문제