[TIL / JavaScript] 연산자 (2)

Changyun Go·2021년 7월 19일
0
post-thumbnail

할당 연산자


  • 할당 연산자(Assignment Operator)는 우항을 좌항에 있는 변수에 할당한다.
  • 할당 연산은 할당된 값으로 평가되는 표현식이다.
var x;

x = 10;   // 10
x += 5;   // 15
x -= 5;   // 10
x *= 5;   // 50
x /= 5;   // 10
x %= 5;   // 0

var str = 'My name is ';
str += 'Lee'; // My name is Lee

비교 연산자


  • 비교 연산자(Comparison Operator)는 좌항과 우항을 비교하여 boolean 값을 반환한다.

동등 / 일치 비교 연산자

==

동등 연산자(equal operator)

  • 암묵적 타입 변환을 통해 타입을 일치시킨 후 같은 값을 갖는지 비교한다.
  • 좌항과 우항을 비교해서 같다면 true, 다르면 false를 반환한다.
5 == 5    // true
// 타입은 다르지만 암묵적 타입 변환을 통해 타입을 일치시키면 같은 값을 같는다.
5 == '5'   //true
5 == 8    // false

변수에 값을 넣어주지 않은 상태에서 출력하면 undefined가 출력된다.

var a;
alert(a);  // undefined 

null 값을 넣어주면 null이 출력된다. → 값이 없는 상태를 프로그래머가 의도적으로 부여한 것이다.

var a = null;
alert(a);  // null

엄격히 다르지만 동등 연산자에서는 true를 반환한다.

alert(null == undefined);       //true
alert(null === undefined);      //false
  • 동등 연산자는 예측하기 어려운 결과를 만들기 때문에 사용하지 말고 일치 연산자를 사용하는 것이 좋다.
  • 비슷한 것과 같은 것을 구분하지 않는 형식의 연산은 버그를 발생시키기 쉽다.

===

일치 연산자(strict equal operator)

  • 좌항과 우항의 값도 같고 타입도 같아야 true를 반환한다.
alert(1=='1');              //true
alert(1==='1');             //false
  • 일치 연산자에서 숫자 1과 true는 다르다.
alert(true == 1);               //true
alert(true === 1);              //false
alert(true == '1');             //true
alert(true === '1');            //false

NaN

  • 0/0과 같은 연산의 결과로 만들어지는 특수한 데이터 형으로 숫자가 아니라는 뜻이다.
  • 자신과 일치하지 않는 유일한 값이다.
alert(NaN === NaN);             //false
  • NaN인지 조사하려면 빌트인 함수 isNaN을 사용한다.
isNaN(NaN) // true

!=

부동등 연산자

  • !는 부정을 의미한다.
  • false가 결과 값인 수식에 !=를 사용하면 true가 된다.
alert(1!=2);            //true
alert(1!=1);            //false
alert("one"!="two");    //true
alert("one"!="one");    //false

!==

불일치 연산자

5 !== '5' // true

대소 관계 비교 연산자

>

  • 좌항이 우항보다 크다면 true, 그렇지 않다면 false이다.(↔<)
alert(10>20);   //false
alert(10>1);    //true
alert(10>10);   //false

>=

  • 좌항이 우항보다 크거나 같다.(↔<=)
alert(10>=20);      //false
alert(10>=1);       //true
alert(10>=10);      //true

삼항 조건 연산자


  • 삼항 조건 연산자(ternary operator)는 조건식의 평가 결과에 따라 반환할 값을 결정한다.
조건식 ? 조건식이 true일때 반환할 값 : 조건식이 false일때 반환할 값
var x = 2;

// x가 짝수이면 '짝수'를 홀수이면 '홀수'를 반환한다.
// 2 % 2는 0이고 0은 false로 암묵적 타입 변환된다.
var result = x % 2 ? '홀수' : '짝수';

console.log(result); // 짝수
  • if…else 문을 사용해도 동일한 처리를 할 수 있다. 하지만 if…else 문은 값으로 평가할 수 없기 때문에 표현식이 아닌 문이다.
var x = 2, result;

// x가 짝수이면 '짝수'를 홀수이면 '홀수'를 반환한다.
// 2 % 2는 0이고 0은 false로 암묵적 타입 변환된다.
if (x % 2) result = '홀수';
else       result = '짝수';

console.log(result); // 짝수

P.S.

동등 연산자와 일치 연산자에 대한 내용을 보면서 약간 충격을 받았다😮 버그를 예방하기 위해서, 언어가 지원하는 편의성을 프로그래머가 외면해야 한다는 점이 신선했다. 관용적인 요소는 당장 시스템을 쉽게 구현할 수 있게 하지만, 코드에서 오류를 발견하지 못하고 시스템이 동작하는 단계에서 심각한 버그를 직면할 수 있다는 사실을 꼭 기억해야겠다🙃

참고 문서


0개의 댓글