해당 포스팅은 위키북스의 "모던 자바스크립트 Deep Dive"라는 책을 독학하며 기록하는 글입니다.

연산자는 하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입, 지수 연산 등을 수행해 하나의 값을 만든다.

산술연산

피연산자를 대상으로 수학적 계산을 수행해 새로운 숫자 값을 만든다.
산술 연산이 불가능한 경우, NaN을 반환한다.

산술 연산의 종류를 살펴보자.

  1. 이항 산술 연산자 : +, -, *, /, %
  2. 단항 산술 연산자 : ++, --, +, -
  3. 문자열 연결 연산자 : +(피연산자 중 하나 이상이 문자열일 경우 문자열 연결 연산자로 동작)

할당연산

우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당한다.

종류 : =, +=, -=, *=, /=, %=


비교연산

좌항과 우항의 피연산자값을 비교한 다음, 그 결과로 불리언 값으로 반환한다.

  1. 동등 : '값'이 같은지 확인한다, ==, !=
  2. 일치 : '값'과 '타입'이 같은지 확인한다, ===, !==
  3. 대소 : >, <, >=, <=

동등일치는 같은 기능을 하는 것 같아 보이지만 사실 일치가 더 엄격한 규칙을 가지고 검사를 한다. 예를 들어 5와 '5'를 비교할 때, ==를 사용하면 true가 반환되지만, ===를 사용하면 false가 반환된다.

이러한 일치연산에서도 예외인 경우가 있는데 바로 NaN이다. NaN은 자신과 일치하지 않는 유일한 값이다. NaN === NaN을 진행해도 false가 나온다는 말이다.

값 비교에 있어서 ES6에서 도입된 Object.is()메서드를 사용하면 편리하다.
해당 함수는 인자로 받은 2개의 값이 같으면 true, 다르면 false를 반환한다.

Object.is(-0, +0)	//false, 음의 0과 양의 0은 다르다.
Object.is(NaN, NaN)	//true
Object.is(5, '5')	//false
Object.is(12, 12)	//true

삼항조건연산

조건식의 평가 결과에 따라 반환할 값을 결정한다. 사용법은 다음과 같다.

조건식 ? 조건식이 true일 때 반환할 값 : 조건식이 false일 때 반환할 값

if ... else 문과 비슷하게 사용할 수 있지만 if ... else 는 '문'으로 평가되기 때문에 값으로 사용할 수 없다. 그러나 삼항조건연산을 사용하면 표현식으로 평가되기 때문에 값으로 사용될 수 있다는 차이점이 있다.

따져야 할 조건이 적다면 삼항조건연산을 사용하는 것이 좋지만, 조건이 많다면 if ... else 문을 사용하는 것이 코드의 가독성면에서 더 좋다.


논리연산

우항과 좌항의 피연산자를 논리 연산한다.

종류 : ||, &&, !

이중 논리 부정 연산자인 !는 피연산자가 불리언 값이 아니더라도 암묵적 타입 변환을 통해 타입을 변경하여 연산을 진행한다.


typeof연산

typeof연산자는 괄호안의 값의 데이터 타입을 평가하여 "string", "number", "boolean", "undefined", "symbol", "object", "function" 중 하나를 반환한다. 이때, 위에 쓰인 것과 마찬가지로 문자열 형태로 반환한다는 점을 유의하자.

typeof(null)을 하면 "null"이 아닌 "function"을 반환하는데, 이는 자바스크립트 첫 번째 버전의 버그이다. 수정시 기존 코드에 영향을 줄 수 있기 때문에 아직까지 수정되지 못하고 있다고 한다.

또한 선언하지 않은 변수명을 검사하면 에러가 아닌 undefined를 반환한다. ("undefined"와 다르다!)


지수연산

ES7에서 도입된 연산자로 **이다. 좌항을 밑으로, 우항을 지수로 평가하여 연산을 진행한다.

음수를 밑으로 지정하기 위해서는 괄호로 묶어야 한다.

5 ** 2		//25
-2 ** 2		//Error
(-2) ** 2	// 4
profile
I Will be Relaxed Person

0개의 댓글