흰 스타렉스에서 내가 내리지

'!!' 는 js에서 무엇을 의미하는가? 본문

Javascript

'!!' 는 js에서 무엇을 의미하는가?

주씨. 2022. 3. 23. 15:53
728x90

다른사람의 JavaScript 코드에서 !! 를 보고 저게 무슨 효과가 있는지 의문을 가졌을 수도 있다.

결론 : 변수를 boolean type으로 바꾸는 가장 간단한 방법이다

 

JavaScript는 static language가 아니고 dynamic language이다. 이 말은 변수는 어느 type이든 참조하거나 가질수 있고, 그 type은 어느 지점에서든 바뀔 수 있다. 

JS에서 type은 대표적으로 아래와 같은 type이 있다. 물론 다른 것도 더 있음.

  • Boolean
  • String
  • Number
  • Object

True 와 Truthy

function() {
  var thisIsTrue = true;
  if (thisIsTrue) {
    window.alert('It certainly is!');
  }
}

if문을 판단할 때, thisIsTrue는 boolean 타입으로 명백하게 true니까 블록을 실행될것이다.

 

if문은 boolean 타입이 아닌 다른 type이 와도 boolean으로 casting해서 판단한다.

function() {
  var nothing = '';
  if (nothing) {
    window.alert('Nothing');
  } else {
    window.alert('Huh?');
  }
}

이 코드가 실행되면 'Huh?'라는 알림이 뜬다.

빈 문자열인 nothing이라는 변수는 false 로 평가되기 때문이다.

이것이 우리가 truthy나 falsey 라고 표현하는 것.

 

truthy의 종류:

  • Object: {}
  • Array: []
  • Not empty string: "anything"
  • Number other than zero: 3.14
  • Date: new Date();

falsey의 종류:

  • Empty string: ""
  • 0
  • null
  • undefined
  • NaN

 

자바스크립트 엔진은 우리의 변수를 필요할 때 boolean 타입으로 변환한다.

 


그래서 !! 가 무엇이냐

 

자바스크립트 변수를 boolean 타입으로 변환하는 간단한 방법이 !!이다. 아래는 데모코드이다.

function() {
  var name = 'Brian';

  //alert 'string'
  window.alert(typeof name);

  //cast to boolean
  var bool = !!name;

  //alert 'boolean'
  window.alert(typeof bool);
}