연산자 (operator)는 하나 이상의 포현식을 대상으로 산술, 할당, 비교, 논리, 타입, 지수 연산 등을 이용하여 하나의 값을 만든다.
피연산자 (operand)는 연산의 대상이며, 값으로 평가된다.
❗ 산술 연산자
산술 연산자 (arithmetic operator) 은 피연산자를 대상으로 수학적 계산을 통해 새로운 숫자 값을 만들며, 연산이 불가할 경우 NaN 을 반환한다.
❓이항 산술 연산자
이항 (binary) 산술 연산자는 2개의 피연산자를 연산하여 값을 만든다.
부수효과 (side effect)란 산술 연산을 통해 피연산자의 값이 바뀌는 경우를 말한다.
❓단항 산술 연산자
단항 (unary) 산술 연산자는 1개의 피연산자를 연산하여 값을 만든다.
증가 / 감소 연산자는 피연산자의 값이 변경되는 부수효과를 갖고 있다.
var x= 1;
x++; //x = x + 1;
console.log('x'+x);
x--; //x = x - 1;
console.log('x'+x);
x 라는 피연산자의 값이 암묵적인 할당을 통해 변경된다.
전위 증가/감소 연산자 (prefix increment/decrement operator): 피연산자의 값을 증감 후, 연산을 수행한다.
var x = 1
var result = ++x
console.log(`result: ${result} , x : ${x}`)
var result = --x
console.log(`result: ${result} , x : ${x}`)
x 라는 변수에 1을 담은 후 전위 증가 연산자를 통해 result에 할당을 했을 경우, x 의 값이 먼저 증감이 된 후 result 에 증가된 x의 값이 할당된다.
마찬가지로 전위 감소 연산자 또한 x의 값이 먼저 감소되고, 감소된 x의 값이 result에 할당된다.
후위 증가/감소 연산자 (postfix increment/decrement operator): 연산을 수행한 후, 피연산자의 값을 증감한다.
var x = 1;
var result = x++;
console.log(`result: ${result} / x : ${x}`);
result = x--;
console.log(`result: ${result} / x : ${x}`);
반대로 후위 증가 연산자를 사용할 경우, result에 x의 값이 먼저 할당된 후, x의 값이 증가되며, 마찬가지로 후위 감소 연산자의 경우 result에 x의 값이 먼저 할당된 후 x의 값이 감소된다.
❗ 할당 연산자
할당 연산자 (assignment operator)는 우항에 있는 피연산자의 결과 값을 좌항에 있는 변수에 할당한다.
❗ 비교 연산자
비교 연산자(comparison operator)는 좌항과 우항의 피연산자를 비교한 다음, boolean 값을 반환한다.
❓ 동등/일치 비교 연산자
동일 비교 (loose equality) 와 일치 비교 (strict equality) 연산자는 좌항과 우항의 값 비교에서 엄격성의 정도에 따라 구분된다.
console.log(`5 == 5 => ${5 == 5}`)
console.log(`5 == '5' => ${5 == '5'}`)
console.log(`5 === 5 => ${5 === 5}`)
console.log(`5 === '5' => ${5 === '5'}`)
만약 동일 비교를 사용하게 된다면 숫자 5 와 문자 5는 true의 값이 반환될 것이다. 하지만 엄격 비교를 사용한다면 데이터 타입이 일치하지 않기 때문에 false의 값이 반환된다.
동등 비교는 예측하기 어려운 결과를 만들어내기 때문에 일치 비교 연산자를 사용하는 것이 좋다.
❓ 대소 관계 비교 연산자
좌항과 우항 피연산자 값의 대소 관계를 비교한 후 boolean 값을 반환한다.
❗ 삼항 조건 연산자
삼항 조건 연산자 (ternary operator)는 조건식의 평가 결과에 따라 반환될 값을 결정한다.
조건식 ? true일 경우 반환값 : false일 경우 반환값
var score;
score=70;
var result = score >= 60 ? 'pass' : 'false';
console.log(`result : ${result}`);
score = 50;
result = score >= 60 ? 'pass' : 'false';
console.log(`result : ${result}`);
만약 score의 값이 60 이상일 경우 result 변수에 'pass'가 할당되고, 미만일 경우 'false'가 할당된다.
삼항 조건 연산자는 if..else 문과 비교될 수 있다. 두 문 모두 조건을 통해 값을 도출할 수 있다.
하지만 삼항 조건 연산자는 값처럼 쓰여, 반환을 통해 변수에 할당할 수 있지만 if...else 문은 값처럼 사용할 수 없다.
//삼항 조건 연산자
var result = score >= 60 ? 'pass' : 'false'
//if..else
var result = if (score>=60){'pass'} else {'false'}
하지만 조건의 수가 많아진다면 if..else문을 사용하는 것이 가독성에 더 좋다.
❗ 논리 연산자
논리 연산자 (logical operator) 는 우항과 좌항의 피연산자를 논리 연산한다.
true || true // ->true
true || false // ->true
false || true // ->true
false || false // ->false
true && true // ->true
true && false // ->false
false && true // ->false
false && false // ->false
!true // ->false
!false // ->true
|| -> 좌항과 우항 중 하나의 값이 true 면 true 반환
&& -> 좌항과 우항 모두 true 일 경우 true 반환
! -> 피연산자 값 반대 값 반환
❗ 연산자 우선 순위
❗ 연산자 결합 순서