연산자는 어떤 특정한 연산을 처리하기 위해서 사용하는 기호를 말합니다. 우리가 변수를 선언할 때 변수에 데이터를 할당하기 위해서 사용한 등호(=) 기호도 연산자입니다.
자바스크립트에서는 연산자를 크게 산술, 증감, 대입, 비교, 논리, 삼항, 비트로 구분하고 있는데, 비트 연산자는 웹 프로그래밍 관점에서 별로 사용할 일이 없으므로 배우지 않고 나머지 연산자들만 순차적으로 배워보도록 하겠습니다.
피연산자란 연산자에 의해서 연산에 참여하는 데이터(값) 또는 항을 의미합니다.
산술 연산자는 사칙연산을 다룰 때 사용하는 가장 기본적이면서도 많이 사용되는 연산자입니다. 자바스크립트에서는 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지 연산자로 구성됩니다.
덧셈(+)
연산 기호로 + 를 사용합니다.
연산자의 좌변과 우변의 피연산자를 덧셈합니다.
10 + 20; // 30
뺄셈(-)
연산 기호로 - 를 사용합니다.
연산자의 좌변과 우변의 피연산자를 뺄셈합니다.
20 - 10; // 10
곱셈(*)
연산 기호로 * 를 사용합니다.
연산자의 좌변과 우변의 피연산자를 곱셈합니다.
10 * 10; // 100
나눗셈(/)
연산 기호로 / 를 사용합니다.
연산자의 좌변과 우변의 피연산자를 나눕니다.
10 / 5; // 2
나머지(%)
연산 기호로 %를 사용합니다.
연산자의 좌변과 우변의 피연산자를 나누어 떨어지는 나머지를 구합니다.
10 % 3; // 1
거듭제곱(**)
연산 기호로 ** 를 사용합니다.
왼쪽 피연산자를 밑, 오른쪽 피연산자를 지수로 한 값을 구합니다.
거듭제곱 연산자는 우측 결합성을 가집니다. 따라서 a b c는 a (b c)와 같습니다.
10 ** 3; // 1000
증감 연산자는 증가 연산자와 감소 연산자를 한 번에 일컫는 용어입니다.
증가 연산자(++)
증가 연산자는 숫자형 데이터를 1 증가합니다.
let a = 10;
++a; //11
감소 연산자(--)
감소 연산자는 숫자형 데이터를 1 감소합니다.
let a = 10;
--a; // 9
주의
증가 연산자는 데이터에 직접적으로 사용할 수 없고 데이터가 할당 된 변수만 피연산자로 사용할 수 있습니다.
증감 연산자는 특이하게도 연산자를 변수의 앞에 썼느냐(전치) 뒤에 썼느냐(후치)에 따라서 전치 연산과 후치 연산이라는 작동 방식으로 구분됩니다.
전치 연산
let num1 = 10;
num2 = ++num1;
console.log(num2); // ??
후치 연산
let num1 = 10;
num2 = num1++;
console.log(num2); // ??
대입 연산자는 변수나 상수에 데이터를 대입하기 위해서 사용하는 연산자입니다.
할당 연산자(=)
const age = 30;
복합 대입 연산자
let sum = 10;
sum = sum + 20; // sum += 20;
비교 연산자는 왼쪽의 피연산자와 오른쪽의 피연산자를 비교하는 연산자입니다.
비교 연산자는 동등(==), 일치(===), 부등(!=), 불일치(!==), ~보다큰(>), ~보다 크거나 같은(≥), ~보다 작음(<), ~보가 작거나 같음(≤)이 있습니다.
동등 == 피연산자들의 데이터가 같으면 참을 반환합니다. (자료형 검사 x)
일치 === 피연산자들의 데이터가 같으면 참을 반환합니다 (자료형 검사 o)
부등 != 피연산자들의 데이터가 다르면 참을 반환합니다. (자료형 검사 x)
불일치 !== 피연산자들의 데이터가 다르면 참을 반환합니다.(자료형 검사 o)
~보다 큰 > 좌변의 피연산자의 데이터가 우변의 피연산자보다 크면 참을 반환합니다.
~보다 크거나 같은 >= 좌변의 피연산자의 데이터가 우변의 피연산자보다 크거나 같으면 참을 반환합니다.
~보다 작은 < 좌변의 피연산자의 데이터가 우변의 피연산자보다 작으면 참을 반환합니다.
~보다 작거나 같은 <= 좌변의 피연산자의 데이터가 우변의 피연산자보다 작거나 같으면 참을 반환합니다.
동등과 부등은 암시적 형변환을 해서 비교하기 때문에 정확한 비교라고 할 수 없습니다.
const a = 10;
const strA = "10";
const b = 20;
a == strA; // true
a === strA; // false
a == b; // false
a != b; // true
a != strA; // false
a !== strA; // true
세 개의 피연산자를 이용해서 비교하는 연산자입니다.
삼항 연산자는 피연산자1이 참이면 피연산자2를 실행하고 거짓이면 피연산자 3을 실행합니다.
중첩 가능 하지만 가독성이 떨어져 여러번 사용해야하는 상황이 온다면 다른 조건문을 사용합니다.
피연산자1 ? 피연산자2 : 피연산자3
let myMoney = 3000;
let price = 5000;
const result = myMoney > price ? '돈이 부족합니다.' : '물건을 구매하겠습니까?';
논리 연산자는 피연산자들의 논리적인 판단을 거쳐 논리형(boolean)값을 반환하는 연산자입니다.
세부적으로 and(&&), or(||), not(!) 연산자가 있습니다. 왼쪽부터 오른쪽으로 판단합니다.
&&의 경우 앞이 false이면 뒤에 뭐가 있어도 false이기 때문에 바로 false로 판단합니다.
||의 경우 앞이 true 이면 바로 true로 판단합니다.
and && expr1 && expr2 좌변(expr1)과 우변(expr2)의 피연산자가 참이면 참입니다.
or || expr1 || expr2 좌변(expr1)과 우변(expr2)의 피연산자중 하나만 참이면 됩니다.
not ! !expr 단일 피연산자를 반대의 논리형 데이터로 반환합니다.
데이터를 부정연산 두번 시행하면 결과가 명시적인 논리형 값 true , false로 나옴
const num = 9;
console.log(!!num); // true