자바스크립트 코드에서 이중 느낌표(!!
)를 본 적이 있다면 그 용도와 기능이 궁금할 것이다.
간단하게 생각하자.
it's short way to cast a variable to be a boolean(true or false) value.
자바스크립트는 정적 언어가 아니라 동적 언어다.
즉, 변수는 모든 유형의 값을 참조하거나 가질 수 있고 언제든지 변경할 수 있다.
자바스크립트에는 다양한 데이터 유형이 있는데, 그 중 boolean을 생각해보자.
boolean 데이터 타입은 0(거짓) 또는 1(참)과 같은 단순한 비트값이므로, 모든 데이터 유형 중 가장 단순하다.
자바스크립트의 논리 연산자 중 NOT연산자인 느낌표(!
)는 입력값을 boolean으로 변환하여 값이 true이면 false, false면 true로 값을 리턴한다.
그럼 이중 느낌표는 어떤 경우에 사용할까?
이중 느낌표 연산자(!!
)는 확실한 논리 결과를 내기 위해 사용한다.
다른 타입의 데이터를 boolean 타입으로 명시적으로 형 변환 하기 위해 사용한다.
예를 들어, 정의되지 않은 변수 undefined 값을 가진 내용의 논리 연산 시에도 확실한 true/false 값을 가지도록 하는게 목적이다.
let a = 'test'; // a: 'test'
let b = !'test'; // b: false
let c = !!'test'; // c: true
undefined
(정의되지 않은 값), ""
(빈 문자열), 0
, null
, NaN
(Not a Number), false
값은 false.
그 외는 true 값을 리턴한다.
('str') // true('str')
!('str') // false
!!('str') // true
('') // false('')
!('') // true
!!('') // false
true // true
!true // false
!!true // true
false // false
!false // true
!!false // false
NaN // false(NaN)
!NaN // true
!!NaN // false
undefined // false(undefined)
!undefined // true
!!undefined // false
null // false(null)
!null // true
!!null // false
0 // false(0)
!0 // true
!!0 // false
777 // true(777)
!777 // false
!!777 // true