우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당한다.
할당연산자 | 예 | 동일표현 | 부수효과 |
---|---|---|---|
= | x =5 | x=5 | 0 |
+= | x+=5 | x=x+5 | 0 |
-= | x-=5 | x=x-5 | 0 |
*= | x*=5 | x=x*5 | 0 |
/= | x/=5 | x=x/5 | 0 |
%= | x%=5 | x=x%5 | 0 |
※ 할당문은 표현식이다.
var a, b, c;
//연쇄 할당, 오른쪽에서 왼쪽으로 진행
a = b = c = 0;
console.log(a, b, c); //0 0 0
좌항과 우항의 피연산자를 비교한 다음 결과를 불리언 값으로 반환한다.
==
===
!=
!==
if문이나 for문과 같은 제어문의 조건식에서 주로 사용한다.
타입은 다르더라도 같은 값일 수 있다면 true 반환
암묵적으로 타입을 변환을 통해 타입을 일치 시킨 후같은 값인지 비교한다.
//동등 비교
5 == 5; //true
//타입이 다르지만 true를 반환한다.
5 == '5';//true
타입도 같고 값도 같은 경우 한에서 true를 반환한다.
결과를 예측하기 쉽다.
//일치 비교
5 === 5; //true
//값의 타입이 다르기 때문에 false를 반환하다.
5 === '5';//false
※ 주의사항 1. NaN
일치 비교 연산자에 NaN은 자신과 일치하지 않은 유일한 값이다.
NaN === NaN //false
NaN을 일치 연산자를 이용해 비교할 경우 false가 반환된다.
NaN인지 조사하려면 "빌트인 함수 Number.isNaN"을 사용한다.
//Number.isNaN 함수는 지정한 값이 NaN인지 확인하고 그 결과값을 불리언으로 반환
Number.isNaN(NaN); //true
Number.isNaN(10); //false
Number.isNaN(1 + undefined); //true
//undefined는 숫자로 반환도지 않고 NaN으로 반환되어 true가 나온다.
※ 주의사항 2. 숫자0
동등/일치 비교 연산자는 양의 0과 음의 0 비교를 true로 반환한다.
0 === -0; //true 0 == -0; //true
정확한 비교 값을 얻기 위해서는 ES6에 도입된 "Object.is메서드"를 사용한다.
-0 === +0; //true
Object.is(-0, +0); //false
NaN === NaN; //false
Object.is(NaN, NaN) //true;
비교(==)/일치(===)연산자의 반대 개념이다.
// 부동등 비교 5 != 8 ; //true 5 != 5 ; //false 5 != '5' //false //불일치 비교 5 !== 8 //true 5 !== 5; //false 5 !== '5' //true
피연산자의 크기를 비교해 불리언 값을 반환한다.
>
<
>=
조건식 ? 조건식이 true일 때 반환할 값 : 조건식이 false일 때 반환할 값
var x= 2;
//2 % 2는 0이다. 0은 불리언 타입으로 false로 변환된다.
var result = x % 2 ? '홀수' : '짝수';
console.log(result); //짝수
var x = 10;
var result = x % 2 ? '홀수' : '짝수' ;
console.log(result); //짝수
※ 참고) if else문과 유사하게 처리할 수 있으나, if else문은 값처럼 사용할 수 없다.
(삼항 조건 연산자는 가능)
var x = 10; var result = if(x % 2){result = '홀수'} else {result = '짝수'}; //SyntaxError : Unexpected token if(에러 뜸)
if else문은 표현식이 아닌 문이기 때문에 값처럼 사용할 수 없다.
반면에 삼항 조건 연산자 표현식은 표현식인 문이기 때문에 값처럼 사용이 가능하다.
따라서, 조건에 어떤 값을 결정해야 한다면 삼항 조건 연산자 표현식
조건에 따라 수행해야 할 문이 여러개라면 if else문이 가독성이 더 좋다.
||(OR0)
&&(AND)
!(NOT)
||(OR)
은 하나만 true여도 true를 반환true || true; //true
true || false //true
false || true; //true
false || false; //false
&&(AND)
은 모두 true여야 true를 반환true && true; //true
true && false //false
false && true; //false
false && false; //false
!(NOT)
은 결과값의 반대값 을 반환!true; //false
!false; //true
||
&&
연산자는 표현식의 평가 결과 값이 불리언 값이 아닐 수도 있다.!
연산자는 언제나 불리언 값을 반환한다. //암묵적 변환
!0; //true
!'Hello'; //false
※ 참고) 모르간 법칙을 활용하여 가독성을 높일 수 있다.
!(x || y) === (!x || !y); !(x && y) === (!x && !y);
왼쪽 피연산자부터 차례대로 피연산자를 평가하고 마지막 피연산자의 평가가 끝나면 피연산자의 평가 결과를 반환한다.
var x, y, z; x=1, y=2, z=3; //3
( )
로 감싸는 연산자
피연산자의 데이터 타입을 문자열로 반환한다.
string
number
boolean
undefined
symbol
object
function
으로 반환
"null"은 반환하지 않고object
로 반환한다.
※ 주의1) null값은 object
로 반환한다.
null타입인지 확인하고 싶은 경우에는 일치연산자(===)를 사용
var foo = null;
typeof foo === null; //false
foo === null; //true
※ 주의2) 선언하지 않은 식별자에 typeof연산자로 연산하면 undefined로 반환된다.
//ddd를 선언한지 않은 상태
typeof ddd; //undefined
좌항은 밑으로 우항은 지수로 거듭제곱하여 숫자값을 반환
ES7에 도입된 연산자
지수연산자 이전에는 Math.pow메서드를 사용
음수를 거듭제곱의 밑으로 사용해 계산하려면 괄호로 묶에 사용해야한다.
이항 연산자 중에서 우선순위가 가장 높다.
연산자 | 개요 |
---|---|
?. | 옵셔널 체이닝 연산자 |
?? | null 병합 연산자 |
delete | 프로퍼티 삭제 |
new | 생성자 함수를 호출할 때 사용하여 인스턴스를 생성 |
instanceOf | 좌변의 객체가 우변의 생성자 함수와 연결된 인스턴스인지 판별 |
in | 프로퍼티 존재 확인 |
일부 연산자에는 다른 코드에 영향을 주는 부수효과를 가진다.
할당연산자(=)
증감/감소 연산자(++/--)
delete연산자
연산자 종류가 많이 모두 기억하기 어렵기 때문에 우선 순위가 가장 높은 그룹연산자
( )
를 사용하여 우선순위를 명시적으로 조절하는 것을 권장
어느 쪽부터 평가를 수행할 것인지를 나타내는 순서
결합 순서 | 연산자 |
---|---|
좌항->우항 | + - / % [] () ?? ?. in insetanceof < <= > => && \\ |
우항->좌항 | ++ -- 할당연산자(=,+=,-=,...) !x +x -x ++x --x typeof delete 삼항조건연산자 ** |