연산자란?
하나 이상의
표현식을 대상으로 산술/ 할당/ 비교/ 논리/ 타입/ 지수연산 등을 수행해 하나의 값으로 만드는 것
이때, 연산의 대상을 피연산자 라고 함
피연산자는 값으로 평가될 수 있는 표현식이어야 함
그리고 피연산자와 연산자의 조합으로 이루어진 연산자 표현식도 값으로 평가될 수 있는 표현식임
1.산술 연산자
의미 : 피연산자를 대상으로 수학적 계산을 수행해 새로운 숫자값을 만드는 연산자
(산술 연산이 불가능한 경우, NaN을 반환)
1-1.이항 산술 연산자
- 2개의 피연산자를 산술연산하여 숫자 값을 만드는 연산자
- 모든 이항 산술 연산자는 피연산자의 값을 변경하는 side effect가 없음 = 피연산자의 값이 바뀌지 않고 항상 새로운 값을 만듦
1-2.단항 산술 연산자
- 1개의 피연산자를 산술 연산하여 숫자값을 만드는 연산자
- 증가/ 감소(++/ --)연산자는 위치에 의미가 있음
let a = 10; let result; // 선할당 후증가 result = a++ console.log(result, a) //10 11 // 선증가 후할당 result = ++a console.log(result, a) //12 12 // 선할당 후감소 result = a-- console.log(result, a) //12 11 // 선감소 후할당 result = --a console.log(result, a) //10 10
- + 단항 연산자 사용시, 피연산자를 숫자 타입으로 변환하여 반환
- - 단항 연산자 사용시, 피연산자의 부호를 반전한 값을 반환, 그리고 숫자 타입이 아닌 피연산자에 사용하면 피연산자를 숫자타입으로 변환하여 반환
//부호 반전 -(-10); // 10 //문자열을 숫자로 타입 변환 -'10'; // -10 //불리언 값을 숫자로 타입 변환 -true; // -1 //문자열은 숫자로 타입 젼환할 수 없으므로 NaN을 반환 -'hello'; // NaN
1-3.문자열 연결 연산자
- + 연산자는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작
// 문자열 연결 연산자 '1' + 2; // '12' 1 + '2'; // '12' // 산술 연산자 1 + 2; // 3 // true는 1로 타입 변환 => 암묵적 타입 변환 또는 타입 강제 변환 1 + true; // 2 // false는 0로 타입 변환 => 암묵적 타입 변환 또는 타입 강제 변환 1 + false; // 1 // null는 0로 타입 변환 => 암묵적 타입 변환 또는 타입 강제 변환 1 + null; // 1 // undefined는 숫자로 타입 변환되지 않음 +undefined; // NaN 1 + undefined; // NaN
2.할당 연산자
- 우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당하는 연산자
3.비교 연산자
3-1.동등/ 일치 비교 연산자
- 좌항과 우항의 피연산자를 비교한 다음 그 결과를 불리언 값으로 반환하는 연산자
- 동등 비교(==) 연산자는 좌항과 우항의 피연산자를 비교할 때, 먼저 암묵적 타입 변환을 통해 타입을 일치시킨 후 같은 값인지 비교함
- 일치 비교(===) 연산자는 좌항과 우항의 피연산자가 타입도 같고 값도 같은 경우에 한하여 true를 반환
- 위의 두 연산자는 +0과 -0을 동일하다고 평가함, 또한 같은 값인 NaN과 NaN을 비교하면 다른 값이라고 평하함
- ES6에서 도입된 Object.is 메서드는 다음과 같이 예측 가능한 정확한 비교 결과를 반환
3-2.대소 관계 비교 연산자
- 피연산자의 크기를 비교하여 불리언 값을 반환하는 연산자
4.삼항 조건 연산자
- 조건식의 평가 결과에 따라 반환할 값을 결정하는 연산자
let result = score > 90? 'pass' : 'fail'; if((score > 90) === false){ 'fail'; } if((score > 90) === true){ 'pass'; }
5.논리 연산자
- 우항과 좌항의 피연산자를 논리 연산하는 연산자
6.쉼표 연산자
- 왼쪽 피연산자부터 순서대로 피연산자를 평가하고 마지막 피연산자의 평가가 끝나면 마지막 피연산자의 평가결과를 반환하는 연산자
7.그룹 연산자
- 소괄호() 로 피연산자를 감싸는 그룹연산자는 자신의 피연산자인 표현식을 가장 먼저 평가함
- 그룹 연산자는 연산자 우선순위가 가장 높음
8.typeof 연산자
- typeof 연산자는 피연산자의 데이터 타입을 문자열로 반환하는 연산자
- typeof 연산자로 null값을 연산하면 ‘null’이 아닌 ‘object’를 반환!
- 값이 null타입인지 확인할때에는 typeof 연산자 대신에 일치 연산자(===)를 사용!
- 선언하지 않은 식별자를 typeof 연산자로 연산하면 ReferenceError가 발생하지 않고, undefined를 반환
9.지수 연산자
- 좌항의 피연산자를 밑으로, 우항의 피연산자를 지수로 거듭제곱하여 숫자 값을 반환하는 연산자
- 참고로 지수연산자가 도입되기 전에는 Math.pow()메서드를 사용함
2 ** 2; // 4 2 ** 0; // 1 2 ** -2; // 0.25 // 아래의 경우 가독성이 좋음 2 ** 2 ** 2; // 16 Math.pow(Math.pow(2,2),2); // 16 // 음수를 거듭제곱의 밑으로 사용해 계산하려면 괄호로 묶어야 함 (-5) ** 2; // 25 // 지수 연산자를 다른 산술 연잔자와 마찬가지로 할당 연산자와 함께 사용가능 let a = 5 a **= 2; // 25
10.이외의 연산자
11.연산자의 Side Effect
- 대부분의 연산자는 side effect가 없음
- 하지만 할당 연산자(=), 증가/감소 연산자(++/--), delete 연산자는 side effect 를 가지고 있음
Uploaded by Notion2Tistory v1.1.0