피연산자를 대상으로 수학적 계산을 수행해 새로운 숫자 값 생성
1) 이항 산술 연산자
2개의 피연산자를 산술 연산하여 숫자 값 생성
2) 단항 산술 연산자
1개의 피연산자를 산술 연산하여 숫자 값 생성
-(-10); // 10
- '10'; // -10 (문자열을 숫자로 타입 변환)
-true; // -1 (불리언 값을 숫자로 타입 변환)
-'Hello'; // NaN (문자열은 숫자로 타입 변환 불가능하므로 NaN 반환)
'1' + 2; // '12'
1+ '2'; // '12'
1 + true; // 2
1 + false; // 1
1 + null; // 1
+undefined; // NaN
1+undefined; // NaN
우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당, 변수값이 변하기 때문에 부수 효과 O
var x;
x = 10;
console.log(x); // 10
x += 5; // x = x + 5
console.log(x); // 15
x -= 5; // x = x - 5
console.log(x); // 10
x *= 5; // x = x * 5
console.log(x); // 50
x /= 5; // x = x / 5
console.log(x); // 10
x %= 5; // x = x % 5
console.log(x); // 0
var str = "My name is ";
str += "Lee";
console.log(str); // My name is Lee
좌항과 우항의 피연산자를 비교한 다음 그 결과를 불리언 값으로 반환
1) 동등/일치 비교 연산자
좌항과 우항의 피연산자 같은 값으로 평가되는지 비교, 부수 효과 X
==
): 좌항과 우항의 피연산자를 비교할 때 먼저 암묵적 타입 변환을 통해 타입을 일치시킨 후 같은 값인지 비교'0' == ''; // false
0 == ''; // true
0 == '0'; // true
false == 'false'; // false
false == '0'; // true
false == null; // false
false == undefined; // false
===
): 좌항과 우항의 피연산자가 타입도 같고 값도 같은 경우 → 즉, 암묵적 타입 변환 일어나지 않음5 === 5; // true
5 === '5'; // false
NaN === NaN; // false
❗️NaN은 유일하게 자신과 일치하지 않은 값임! NaN인지 조사하기 위해서는 isNaN
사용isNaN(NaN); // true
isNaN(10); // false
isNaN(1+undefined); // true
!=
): x와 y의 값이 다름, 동등 비교 연산자의 반대 개념5 != 8; // true
5 != 5; // false
5 != '5'; // false
!==
): 일치 비교 연산자의 반대 개념5 !== 8; // true
5 !== 5; // false
5 !== '5'; // true
2) 대소 관계 비교 연산자
피연산자의 크기를 비교하여 불리언 값 반환
5 > 0; // true
5 > 5; // false
5 >= 5; // true
5 <= 5; // true
조건식의 평가 결과에 따라 반환할 값 결정, 부수 효과 X
형태: 조건식 ? 조건식이 true일 때 반환 값 : 조건식이 false일 때 반환 값
var x = 2;
var result = x % 2 ? "홀수" : "짝수";
console.log(result); // 짝수
var x = 2;
if (x % 2) result = "홀수";
else result = "짝수";
console.log(result); // 짝수
우항과 좌항의 피연산자를 논리 연산
→ 논리합(||
), 논리곱(&&
), 논리 부정(!
)
// 논리합(||)
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
왼쪽 피연산자부터 차례대로 피연산자 평가하고 마지막 피연산자의 평가가 끝나면 마지막 피연산자의 평가 결과 반환
var x, y, z;
x = 1, y = 2, z = 3; // 3
소괄호()로 감싸진 피연산자 그룹부터 표현식 평가
10 * 2 + 3; // 23
10 * (2 + 3); // 50
피연산자의 데이터 타입을 문자열로 반환
string
, number
, boolean
, undefined
, symbol
, object
, function
중 하나 반환typeof ""; // "string"
typeof 1; // "number"
typeof NaN; // "number"
typeof true; // "boolean"
typeof undefined; // "undefined"
typeof Symbol(); // "symbol"
typeof null; // "object"
typeof []; // "object"
typeof {}; // "object"
typeof new Date(); // "object"
typeof /test/gi; // "object"
typeof function () {}; // "function"
❗️null을 typeof 연산자로 연산해보면, object 반환함! → JS 버그 중 하나
var foo = null;
typeof foo === null; // false
foo === null; // true
ES7부터 도입되었으며, 좌항의 피연산자를 밑(base)으로, 우항의 피연산자를 지수(exponent)로 거듭 제곱하여 숫자 값 반환
2 ** 2; // 4
2 ** 2.5; // 5.6568...
2 ** 0; // 1
2 ** -2; // 0.25
Math.pow
메서드 사용Math.pow(2, 2); // 4
Math.pow(2, 2.5); // 5.6568...
(-5) ** 2; // 25
?.
: 옵셔널 체이닝 연산자??
: null 병합 연산자delete
: 프로퍼티 삭제new
: 생성자 함수를 호출할 때 사용하여 인스턴스 생성instanceof
: 좌변의 객체가 우변의 생성자 함수와 연결된 인스턴스인지 판별in
: 프로퍼트 존재 확인→ 뒷 장에 나옴!
우선순위 | 연산자 |
---|---|
1 | () |
2 | new(매개변수 O), ., [], (), ?. |
3 | new(매개변수 X) |
4 | x++, x-- |
5 | !x, +x, -x, ++x, --x, typeof, delete |
6 | ** |
7 | *, /, % |
8 | +, - |
9 | <, <=, >, >=, in, instanceof |
10 | ==, !=, ===, !== |
11 | ?? |
12 | && |
13 | || |
14 | ? … : … |
15 | =, +=, -=(할당 연산자) |
16 | , |