[자바스크립트 Deep Dive] 7. 연산자

unhyif·2022년 5월 17일
0

7.1 산술 연산자

  • 수학적 계산을 통해 새로운 숫자 값을 생성함
  • 산술 연산이 불가능한 경우 NaN을 반환

7.1.1 이항 산술 연산자

  • 2개의 피연산자를 산술 연산함

e.g. +, -, *, /, %

7.1.2 단항 산술 연산자

  • 1개의 피연산자를 산술 연산함

e.g. ++, --, +, -

let x = 3;
let result;

result = x++;
console.log(result, x); // 3 4

result = ++x;
console.log(result, x); // 5 5

result = x--;
console.log(result, x); // 5 4

result = --x;
console.log(result, x); // 3 3
  • 숫자 타입이 아닌 피연산자에 +, - 연산자를 사용하면 숫자 타입으로 변환된 값을 반환함
  • - 연산자는 피연산자의 부호를 반전한 값을 반환함
let x = '1';
console.log(+x); // 1
console.log(-x); // -1
console.log(x); // '1'

x = true;
console.log(+x); // 1
console.log(-x); // -1
console.log(x); // true

x = 'str';
console.log(+x); // NaN
console.log(-x); // NaN
console.log(x); // 'str'

7.1.3 문자열 연결 연산자

  • + 연산자는 하나 이상의 피연산자가 문자열일 때 문자열 연결 연산자로 동작함
console.log(1 + 2 + '3'); // 33
console.log('1' + 2 + 3); // 123
console.log(true + 1 + '2'); // 22

7.2 할당 연산자

  • 우항의 피연산자 평가 결과를 좌항의 변수에 할당함

e.g. =, +=, -=, *=, /=, %=

let str = 'My name is ';
str += 'J';
console.log(str); // My name is J

cf) 할당문은 표현식인 문임 -> 할당문을 다른 변수에 할당 가능함

let a, b, c;
a = b = c = 0;
console.log(a, b, c); // 0 0 0

7.3 비교 연산자

  • 좌항과 우항의 피연산자를 비교한 결과를 불리언 값으로 반환함

7.3.1 동등/일치 비교 연산자

동등 비교 연산자

  • 좌항과 우항의 피연산자의 값이 같은지 비교함 (느슨한 비교)

cf) 이때의 값은 암묵적 타입 변환을 거친 값임

  • 암묵적 타입 변환(type coercion): 개발자의 의도와 상관 없이 JS 엔진에 의해 타입이 변환되는 것

e.g. ==, !=

console.log(1 == true); // true

일치 비교 연산자

  • 좌항과 우항의 피연산자의 타입과 값 모두가 같은지 비교함 (엄격한 비교)

e.g. ===, !==

console.log(1 === true); // false

cf) NaN 여부는 Number.isNaN() 또는 Object.is()를 통해 확인해야 함

console.log(NaN === NaN); // false
console.log(Number.isNaN(NaN)); // true
console.log(Object.is(NaN, 1 * 'str')); // true

7.3.2 대소 관계 비교 연산자

  • 좌항과 우항의 피연산자의 값의 크기를 비교함

e.g. >, <, >=, <=

console.log(1 < false); // false

7.4 삼항 조건 연산자

  • 조건식의 평가 결과에 따라 값을 결정하여 반환하는 표현식
    -> 값처럼 사용할 수 있음

조건식 ? 조건식이 truthy할 때 반환할 값 : 조건식이 falsy할 때 반환할 값


7.5 논리 연산자

  • 좌항과 우항의 피연산자(부정 논리 연산자의 경우 우항의 피연산자)를 논리 연산함

e.g. ||, &&, !


7.6 쉼표 연산자 ,

  • 왼쪽부터 차례로 피연산자들을 평가하고, 가장 오른쪽 피연산자의 평가 결과를 반환함
let x, y, z;
const result = ((x = 1), (y = 2), (z = 3));
console.log(x, y, z); // 1 2 3
console.log(result); // 3

7.7 그룹 연산자 ()

  • 연산자 우선순위가 가장 높음

7.8 typeof 연산자

  • 피연산자의 데이터 타입을 문자열로 반환함

cf) 8개의 데이터 타입과 정확히 일치하진 않음

console.log(typeof 100n); // bigint
console.log(typeof null); // object

7.9 지수 연산자 **

  • 좌항의 피연산자를 밑으로, 우항의 피연산자를 지수로 거듭 제곱한 값을 반환함
console.log(2 ** 0); // 1
console.log(2 ** -1); // 0.5

0개의 댓글