[모던 자바스크립트 Deep dive] Study - 7장 연산자(2)

n-u·2022년 4월 13일
0
post-thumbnail

7. 연산자

7.2 할당 연산자

우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당한다.

할당연산자동일표현부수효과
=x =5x=50
+=x+=5x=x+50
-=x-=5x=x-50
*=x*=5x=x*50
/=x/=5x=x/50
%=x%=5x=x%50

할당문은 표현식이다.

  • 할당문은 값으로 평가되는 표현식인 문으로서 할당된 값으로 평가된다.
  • 따라서 할당문을 다른 변수에 할당 할 수 있다.
  • 연쇄할당이 가능하다.
var a, b, c;

//연쇄 할당, 오른쪽에서 왼쪽으로 진행
a = b = c = 0;
console.log(a, b, c); //0 0 0 



7.3 비교 연산자

좌항과 우항의 피연산자를 비교한 다음 결과를 불리언 값으로 반환한다.
== === != !==

if문이나 for문과 같은 제어문의 조건식에서 주로 사용한다.

7.3.1 동등/일치 비교 연산자

1. 동등비교 (==)연산자

타입은 다르더라도 같은 값일 수 있다면 true 반환

암묵적으로 타입을 변환을 통해 타입을 일치 시킨 후같은 값인지 비교한다.

//동등 비교
5 == 5; //true
  
//타입이 다르지만 true를 반환한다.
5 == '5';//true
  • 결과를 예측하기가 어렵고 실수하기 쉬워 일치 비교(===)연산자를 사용한다.

2. 일치비교(===) 연산자

타입도 같고 값도 같은 경우 한에서 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;

3. 부동등 연산자(!=)/불일치 연산자(!==)

비교(==)/일치(===)연산자의 반대 개념이다.

// 부동등 비교
5 != 8 ; //true
5 != 5 ; //false
5 != '5' //false
//불일치 비교
5 !== 8 //true
5 !== 5; //false
5 !== '5' //true

7.3.2 대소 관계 비교 연산자

피연산자의 크기를 비교해 불리언 값을 반환한다.
> < >=




7.4 삼항 조건 연산자

조건식 ? 조건식이 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문이 가독성이 더 좋다.




7.5 논리 연산자

||(OR0) &&(AND) !(NOT)

  1. ||(OR)은 하나만 true여도 true를 반환
true || true; //true
true || false //true
false || true; //true
false || false; //false
  1. &&(AND)은 모두 true여야 true를 반환
true && true; //true
true && false //false
false && true; //false
false && false; //false
  1. !(NOT)은 결과값의 반대값 을 반환
!true; //false
!false; //true
  • || &&연산자는 표현식의 평가 결과 값이 불리언 값이 아닐 수도 있다.
    언제나 2개의 피연산자 중 어느 한쪽으로 평가된다. (단축평가)
  • !연산자는 언제나 불리언 값을 반환한다.
    -> 피연산자가 불리언값이 아니면 불리언 타입으로 암묵적 타입 변환된다.
  //암묵적 변환
  !0; //true
  !'Hello'; //false

참고) 모르간 법칙을 활용하여 가독성을 높일 수 있다.

!(x || y) === (!x || !y);
!(x && y) === (!x && !y);



7.6 쉼표 연산자

왼쪽 피연산자부터 차례대로 피연산자를 평가하고 마지막 피연산자의 평가가 끝나면 피연산자의 평가 결과를 반환한다.

var x, y, z;
x=1, y=2, z=3; //3



7.7 그룹 연산자

( )로 감싸는 연산자

  • 연산자 우선순위가 가장 높으며 연산자의 우선순위를 조절 할 수 있다.



7.8 typeof 연산자

피연산자의 데이터 타입을 문자열로 반환한다.
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



7.9 지수 연산자

좌항은 밑으로 우항은 지수로 거듭제곱하여 숫자값을 반환

  • ES7에 도입된 연산자

  • 지수연산자 이전에는 Math.pow메서드를 사용

  • 음수를 거듭제곱의 밑으로 사용해 계산하려면 괄호로 묶에 사용해야한다.

  • 이항 연산자 중에서 우선순위가 가장 높다.




7.10 그 외의 연산자

연산자개요
?.옵셔널 체이닝 연산자
??null 병합 연산자
delete프로퍼티 삭제
new생성자 함수를 호출할 때 사용하여 인스턴스를 생성
instanceOf좌변의 객체가 우변의 생성자 함수와 연결된 인스턴스인지 판별
in프로퍼티 존재 확인



7.11 연산자의 부수효과

일부 연산자에는 다른 코드에 영향을 주는 부수효과를 가진다.
할당연산자(=) 증감/감소 연산자(++/--) delete연산자




7.12 연산자 우선순위

연산자 종류가 많이 모두 기억하기 어렵기 때문에 우선 순위가 가장 높은 그룹연산자
( )를 사용하여 우선순위를 명시적으로 조절하는 것을 권장




7.13 연산자 결합 순서

어느 쪽부터 평가를 수행할 것인지를 나타내는 순서

결합 순서연산자
좌항->우항+ - / % [] () ?? ?. in insetanceof < <= > => && \\
우항->좌항++ -- 할당연산자(=,+=,-=,...) !x +x -x ++x --x typeof delete 삼항조건연산자 **
profile
기록하며 발전하는 삶

0개의 댓글