모던 자바스크립트 Deep Dive - 07장 연산자

송히·2023년 10월 4일
0
post-thumbnail

7. 연산자

연산자는 하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입, 지수 연산 등을 수행해 하나의 값을 만듦
연산의 대상인 피연산자는 값으로 평가될 수 있는 표현식이어야함
-> 피연산자 & 연산자 조합으로 이뤄진 연산자 표현식도 가능

7.1 산술 연산자

7.1.1 이항 산술 연산자

+, -, *, / % 가 있음

2개의 피연산자를 산술 연산하여 숫자 값을 만듦 -> 피연산자의 값이 바뀌지 않고, 항상 새로운 값을 생성

7.1.2 단항 산술 연산자

++, --, +, - 가 있음

1개의 피연산자를 산술 연산하여 숫자 값 생성 -> ++, --는 피연산자의 값을 변경함 (부수효과 존재)

  • ++ / -- 는 위치에 따라 의미가 달라짐
  1. 피연산자 앞에 위치: 피연산자의 값을 증가/감소시킨 후 다른 연산 수행
  2. 피연산자 뒤에 위치: 다른 연산을 수행한 후, 피연산자의 값을 증가/감소 시ㅋ킴
  • 숫자 타입이 아닌 피연산자에 + 붙이면, 피연산자 타입을 숫자로 반환 -> 피연산자를 변경하는 것은 아니고 숫자 타입으로 변환한 값을 생성해서 반환(부수효과 없음)
  • -는 피연산자 부호 반전 시킴

7.1.3 문자열 연결 연산자

  • 연산자는 피연산자 중 하나 이상이 문자열인 경우, 문자열 연결 연산자로 동작함 -> 숫자 껴있어도 문자열로 인식(암묵적 타입 변환 = 타입 강제 변환)

7.2 할당 연산자

=, +=, -=, *=, /=, %= 가 있음

우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당 -> 부수효과 존재
할당문은 값으로 평가되는 표현식인 문으로서 할당된 값으로 평가됨
-> 할당문을 다른 변수에 할당할 수도 있음 => 여러 변수에 동일한 값을 연쇄 할당 가능

7.3 비교 연산자

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

7.3.1 동등/일치 비교 연산자

==(동등 비교), !=, ===(일치 비교), !== 가 있음

비교의 엄격성에서 차이 존재 ->
1. 동등 비교는 양 항을 암묵적 타입 변환을 통해 타입을 일치시킨 후 같은 값인지 비교
2. 일치 비교는 양 항이 타입과 값이 모두 일치하는지 비교

일치 비교에서 주의할 점

  1. NaN -> NaN 확인시 Number.isNaN 함수 사용
NaN === NaN // false
Number.isNaN(NaN) // true
  1. 0 (0은 양수랑 음수랑 같음)
    0 === -0 으로 처리됨

7.3.2 대소 관계 비교 연산자

>, <, >=, <=가 있음

7.4 삼항 조건 연산자

조건식 ? 조건식이 true일 때 반환할 값 : 조건식이 false일 때 반환할 값 형태로 사용함

if... else 문과 유사하게 처리하지만, 둘의 차이점 존재
=> 삼항 조건 연산자 표현식은 값처럼 사용 가능
if... else 문은 값처럼 사용 불가 (표현식이 아니라 문)
-> 삼항 조건 연산자 표현식은 값으로 평가할 수 있는 표현식인 문

7.5 논리 연산자

|| (논리합 OR), && (논리곱 AND), ! (부정 NOT) 가 있음

우항과 좌항의 피연산자(부정 논리 연산자의 경우 우항의 피연산자)를 논리 연산

논리 부정(!) 연산자는 항상 불리언 값을 반환 -> 피연산자가 불리언 값이 아니면 불리언 타입으로 암묵적 타입 변환
논리합(||) 또는 논리곱(&&) 연산자 표현식의 평가 결과는 불리언 값이 아닐 수도 있음

7.6 쉼표 연산자

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

7.7 그룹 연산자

소괄호()로 피연산자를 감싸는 것으로 연산자 우선순위가 가장 높음

7.8 typeof 연산자

피연산자의 데이터 타입을 문자열로 반환

"string", "number", "boolean", "symbol", "undefined", "object", "function" 의 종류가 있음

null을 연산하면 null을 연산함 -> 확인하려면 === 사용

7.9 지수 연산자

좌항의 피연산자를 밑(base)으로, 우항의 피연산자를 지수(exponent)로 거듭 제곱해 숫자 값 반환 -> 이항 연산자 중 우선 순위가 가장 높음

**(지수 연산자)와 Math.pow는 같은 역할이지만, 가독성이 더 좋음

7.10 그 외의 연산자

7.11 연산자의 부수 효과

일부 연산자는 다른 코드에 영향을 주는 부수 효과가 있음

할당 연산자(=) , 증가/감소 연산자(++/--), delete 연산자

  • =(할당 연산자): 변수 값이 변함 -> 해당 변수를 시용하는 다른 코드에 영향 미침
  • 증가/감소 연산자(++/--): 피연산자의 값을 변경(재할당) -> 해당 변수를 사용히는 다른 코드에 영향 미침
  • delete 연산자: 객체의 프로퍼티를 삭제 -> 해당 객체를 사용하는 다른 코드에 영향 미침

7.12 연산자 우선순위

여러 개의 연산자로 이뤄진 문이 실행될 때 연산자가 실행되는 순서

이외에도 더 있지만 종류가 많으니, 연산자 우선순위가 가장 높은 그룹 연산자를 사용하는 것을 추천함

7.13 연산자 결합 순서

연산자의 어느 쪽(좌항 또는 우항)부터 평가를 수행할 것인지를 나타내는 순서

profile
데브코스 프론트엔드 5기

0개의 댓글