연산자

홍제섭·2022년 4월 14일
0

JavaScript

목록 보기
4/14
post-thumbnail

22.03.14

7장 연산자

하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입, 지수 연산 등을 수행해 하나의 값을 만드는 연산자.
연산의 대상은 피연산자(被 입을 피)라고 하며 '값'으로 평가될 수 있는 표현식이어야함
피연산자와 연산자의 조합으로 이루어진 연산자 표현식도 값으로 평가될 수 있는 표현식
피연산자 : '값'이라는 명사적 역할 / 연산자 : '새로운 값을 만든다'라는 동사 역할

7.1 산술 연산자

  • 피연산자를 대상으로 수학적 계산을 수행해 새로운 숫자 값을 만든다.
  • 산술 불가할 경우 NaN을 반환.

1) 이항 산술 연산자
2개의 피연산자를 산술 연산하여 숫자값을 만듬. 부수효과 없음.
※부수효과(side effect)란? 피연산자의 값을 변경하는 것.
언제나 새로운 값을 만들 뿐.
+,-,*,/,%(나머지)

2) 단항 산술 연산자
1개의 피연산자를 산술 연산하여 숫자값 만듬. ++(증가)와 --(감소) 경우 피연산자의 값을 변경하는 부수효과가 있다.
암묵적 할당이 이루어진다.
증가/감소 연산자는 위치에 의미가 있다. 피연산자의 오른쪽에 위치하면 선할당 후증가/감소, 피연산자의 왼쪽에 위치하면 선증가/감소 후할당.
가급적 사용 안하는 것이 가독성에 유리할 수 있겠다.
'+' 단항 연산자는 피연산자에 어떠한 효과도 없지만 숫자타입이 아닌 피연산자에 사용하면 숫자타입으로 변환하여 반환한다.
숫자 타입으로 변환한 값을 생성해서 반환하는 것이기에 부수효과는 '없다'.
ex.
+ true ; // 1
+ false ; // 0

예측하기 어려운 측면이 있기에 ++/-- 연산자보다는 할당식으로 변수의 값을 증가시키거나 감소시키는 것이 이해하기 좋고 오해가 없는 코드를 만들 수 있다.
'-' 단항 연산자는 피연산자의 부호를 반전한 값을 반환한다. '+' 단항 연산자와 같은 효과. 부수효과는 '없다'.
ex.
- true ; // -1
- '10' ; // -10

3) 문자열 연결 연산자
'+'연산자는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작한다. 그 외의 경우는 산술 연산자로 동작한다.
자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환 되기도 한다.
이를 암묵적 타입 변환(Implicit coercion) 또는 타입 강제 변환(Type coercion)이라고 한다.

7.2 할당 연산자

우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당함.
좌항의 변수에 값을 할당하므로 부수효과가 있음
할당문은 표현식인 문이다. 따라서 값으로 평가될 수 있다.
할당문을 다른 변수에 할당할 수도 있다. 연쇄 할당 가능 (오른쪽에서 왼쪽)

7.3 비교 연산자

좌항과 우항의 피연산자를 비교한 다음 그 결과를 불리언 값으로 반환.
if문이나 for문과 같은 제어문의 조건식에서 주로 사용.

1) 동등 / 일치 비교 연산자
동등 비교 (loose equality 느슨한 균등(?)) 연산자와 일치 비교(strict equlaity(엄격한 균등(?))) 연산자는 좌항과 우항의 피연산자가 같은 값으로 평가되는지 비교해 불리언 값을 반환.
But, 비교하는 엄격성의 정도가 다름. 동등 비교 연산자는 느슨한 비교, 일치 비교는 엄격하게 비교.
== / != 동등 / 부동등, ===/!== 일치 / 불일치
동등 비교 연산자는 좌항과 우항의 피 연산자를 비교할 때 먼저 암묵적 타입 변환을 통해 타입을 일치시킨 후 같은 값인지 비교.
동등 비교 연산자는 예측하기 어려운 결과를 만들기에 사용하지 않는 편이 좋음.
대신 일치 비교(===) 연산자를 사용한다.
일치 비교 (===) 연산자는 타입도 같고 값도 같은 경우에 한하여 true를 반환.
암묵적 타입 변환을 하지 않고 값을 비교. 따라서 예측하기 쉬움.

  • ★NaN 주의하기★ NaN === NaN; // -> false 자신과 일치하지 않는 유일한 값.
  • 숫자 0도 주의 하기. 양의 0과 음의 0, 이들을 비교하면 true 반환

2) 대소 관계 비교 연산자
피연산자의 크기를 비교하여 불리언 값을 반환함. 부수 효과 X

>, <, >= , <=

7.4 삼항 조건 연산자

조건식의 평가 결과에 따라 반환할 값을 결정함. 부수효과 없음.
조건식 ? 조건식이 true일 때 반환할 값 : 조건식이 false일 때 반환할 값
물음표 앞의 첫번째 피연산자는 조건식, 즉 불리언 타입의 값으로 평가될 표현식.
만약 조건식의 평가결과가 불리언 값이 아니면 불리언 값으로 암묵적 타입 변환됨.
삼항 조건 연산자를 쓴 표현식은 조건문이다. if ... else 문을 사용해도 유사하게 처리 가능.
그러나 제일 큰 차이는 삼항조건 연산자 표현식을 값처럼 사용할 수 있지만 if ... else 문은 값처럼 사용할 수 없다.
표현식이 아닌 '문'이기 때문이다.
조건에 따라 어떤 값을 결정해야 한다면 삼항 조건 연산자 표현식이 유리하다.
조건에 따라 수행해야할 문이 여러개라면 if ... else 문의 가독성이 더 좋다.

7.5 논리 연산자

우항과 좌항의 피연산자(부정 논리 연산자의 경우 우항의 피연산자)를 논리 연산한다.
|| 논리합(OR), && 논리곱(AND), !부정(NOT) -> 모두 부수효과 없음.
논리 부정 연산자(!)는 언제나 불리언 값을 반환. 단, 피연산자가 반드시 불리언 값일 필요는 없음.
만약 피연산자가 불리언 값이 아니면 불리언 값으로 암묵적 타입 변환됨.
논리합 또는 논리곱 연산자 표현식의 평가 결과는 불리언 값이 아닐수도 있음.
논리합(||) 또는 논리곱(&&) 연산자 표현식은 언제나 2개의 피연산자 중 어느 한쪽으로 평가된다.

7.6 쉼표 연산자

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

7.7 그룹 연산자

소괄고('()')로 피연산자를 감싸는 그룹 연산자는 자신의 피연산자인 표현식을 가장 먼저 평가한다.
따라서 연산자의 우선순위를 조절할 수 있게한다. 연산자 우선순위가 가장 높다. 무조건 괄호 먼저!

7.8 typeof 연산자

피연산자의 데이터 타입을 '문자열'로 반환. "null"을 반환하는 경우는 없으며, 함수의 경우 "function"을 반환한다.
typeof 연산자로 null 값을 연산해보면 "object"를 반환하는데 이거 버그다.
따라서 값이 null 타입인지 확인할때는 typeof 말고 일치 연산자(===)를 사용하자.
선언하지 않은 식별자를 typeof로 연산해보면 ReferenceError가 아닌 undefined를 반환한다.

7.9 지수 연산자

좌항의 피연산자를 밑으로 (base), 우항의 피연산자를 지수로 (exponent) 거듭제곱하여 숫자 값을 반환한다.
지수 연산자 이전에는 Math.pow 메서드를 사용했다.
다른 연산자와 마찬가지로 할당 연산자와 함께 사용이 가능하다.
지수 연산자는 이상 연산자 중 우선순위가 가장 높다.

7.10 그 외의 연산자

?. / ?? / delete / new / instanceof / in 과 같이 다양한 연산자가 있지만 추후 Deep하게 공부할 것이다.

7.11 연산자의 부수효과

부수효과가 있는 연산자는 1) 할당연산자(=) 2) 증가/감소연산자 (++/--) 3) delete 연산자 다.
※ 부수효과란? 피연산자의 '값'을 변경하는, 다른 코드에 영향을 주는.

7.12 연산자 우선순위

여러개의 연산자로 이뤄진 문이 실행될 때 우선순위가 높을수록 먼저 실행됨 (p. 91 표 참조)
기억에 의존하기 보다는 우선순위가 가장 높은 그룹 연산자를 사용하여 우선순위를 명시적으로 조절하자.

7.13 연산자 결합 순서

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

profile
보여주고 증명하며 사는 삶.

0개의 댓글