#7. 연산자

해피데빙·2022년 7월 14일
0

연산자

  • 하나 이상의 표현식을 대상으로
  • 산술, 할당, 비교, 논리, 타입, 지수 연산 등을 수행
  • 피연산자를 대상으로 계산해서 하나의 값을 만든다

피연산자

  • 연산의 대상 : 피연산자
  • 값으로 평가될 수 있는 표현식

표현식

  • 피연산자와 연산자의 조합으로 이뤄진 연산자 표현식도 값으로 평가될 수 있는 표현식

1.산술 연산자

  • 피연산자 대상으로 수학적 계산을 수행해 새로운 숫자 값을 만든다
  • 불가능 시 NaN 반환
  • 분류
    1. 이항 산술 연산자 : 2개의 피연산자를 산술 연산
  1. 단항 산술 연산자 : 1개의 피연산자를 산술 연산

1)이항 산술 연산자

: 2개의 피연산자를 산술 연산
: 피연산자의 값을 변경하는 부수 효과가 없다

+, -, *, /, %

2)단항 산술 연산자

: 1개의 피연산자를 산술 연산하여 숫자 값을 만든다

++ : 증가, --: 감소 [암묵적 할당이 이뤄진다]

  • 전위 증가/감소 연산자 : 피연산자의 증가/감소 후 다른 연산 수행
  • 후위 증가/감소 연산자 : 다른 연산을 수행한 후 피연산자의 값을 증가/감소
  • : 효과 X , - : 양수를 음수로, 음수를 양수로
    • : 숫자 타입이 아닌 피연산자에 사용하면 숫자 타입으로 변환
    • : 피연산자의 부호를 반전한 값, 숫자 타입이 아닌 피연산자를 숫자 타입으로 변환하여 반환

3)문자열 연결 연산자

    • : 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작
      - 암묵적으로 타입이 자동 변환되기도 한다 [암묵적 타입 변환 / 타입 강제 변환]

2.할당 연산자

: 우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당한다
: 좌항의 변수에 값을 할당하므로 변수 값이 변하는 부수 효과가 있다

표현식은 값으로 평가될 수 있는 문

  • 표현식
  • 표현식X

할당문은 변수에 값을 할당하는 부수 효과만 있을 뿐, 값으로 평가되지 않을 것처럼 보인다
하지만 값으로 평가되는 표현식인 문으로서 할당된 값으로 평가된다

그러므로 할당문을 다른 변수에 할당할 수 있다
이런 특징을 이용해 여러 변수에 동일한 값을 연쇄 할당할 수 있다

var x; 
consle.log(x=10); //10

var a,b,c; 
a = b = c = 0; //c부터 할당이 된다
console.log(a,b,c)//0 0 0

3.비교 연산자

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

1)동등/일치 비교 연산자

: 좌항과 우항의 피연산자가 같은 값으로 평가되는지 비교해 불리언 값을 반환
: 비교하는 엄격성의 정도가 다르다

  • 동등 비교
    - 느슨한 비교
    • 암묵적 변환을 통해 타입을 일치 시킨 후 같은 값인지 비교!
    • 예측하기 어려운 결과, 비추천
  • 일치 비교
    - 엄격한 비교
    • 타입, 값 모두 같아야 true
    • NaN을 주의해야 한다

cf. NaN : 자신과 일치하지 않는 유일한 값
Number.isNaN을 사용해서 숫자가 NaN인지 아닌지 조사한다

cf. +0, -0: 두 비교 다 true

  • == 동등 비교 : 왼쪽 피연산자와 오른쪽 피연산자의 이 같으면 참을 반환함.
  • === 일치 비교 : 왼쪽 피연산자와 오른쪽 피연산자의 값이 같고, 같은 타입이면 참을 반환함.
  • != 부동등 비교 : 왼쪽 피연산자와 오른쪽 피연산자의 이 같지 않으면 참을 반환함.
  • !== 불일치 비교 : 왼쪽 피연산자와 오른쪽 피연산자의 값이 같지 않거나, 타입이 다르면 참을 반환함.

cf. Object.is 메서드
: 예측 가능한 정확한 비교 결과 반환
: 그 외에는 일치 비교 연산자와 동일하게 동작

2)대소 관계 비교 연산자

부수효과가 없다

  •  : 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 크면 참을 반환함.
  • = : 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 크거나 같으면 참을 반환함.

  • < : 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 작으면 참을 반환함.
  • <= : 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 작거나 같으면 참을 반환함.

4. 삼항 조건 연산자

: 조건식의 평가 결과에 따라 반환할 값을 결정한다

  • 부수 효과는 없다
조건식 ? 조건식이 true일 때 반환할 값 : 조건식이 false일 때 반환할 값 
var result = score >= 60 ? 'pass' : 'fail'; 
  • ? 앞의 첫번째 피연산자 : 조건식, 불리언 타입의 값으로 평가될 표현식
    - 불리언 값이 아니면 불리언 값으로 암묵적 타입 변환

  • 첫번째 피연산자가 true로 평가되면 두 번째 피연산자를 반환하고

  • 첫번째 피연산자가 false로 평가되면 세 번째 피연산자를 반환한다

  • if문과 중요한 차이 : 삼항 조건 연산자 표현식은 if문과 달리 값처럼 사용할 수 있다! - 즉 삼항 조건 연산자 표현식은 값으로 평가할 수 있는 표현식인 문!

조건에 따라 어떤 값을 결정할 때 : 삼항 조건 연산자
조건에 따라 수행해야 할 문이 여러 개 : if...else문

5. 논리 연산자

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

&&	논리식이 모두 참이면 참을 반환함. (AND 연산)
||	논리식 중에서 하나라도 참이면 참을 반환함. (OR 연산)
	- 평과 결과가 불리언 값이 아닐 수 있다 
    - 두 개의 피연산자 중 어느 한쪽로 평가된다 (곱이면 뒤, 식이면 앞) 
    ex. 'Cat' && 'Dog' // 'Dog'
    
!	논리식의 결과가 참이면 거짓을, 거짓이면 참을 반환함. (NOT 연산)
	- 언제나 불리언 값을 반환 
    - 피연산자가 불리언 값을 필요 X (암묵적 타입 변환) 
    - ex. !0 //true, !'Hello!'//false

cf. 드 모르간의 법칙

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

6. 쉼표 연산자

  • 왼쪽 피연산자부터 차례대로 피연산자를 평가하고
  • 마지막 피연산자의 평가가 끝나면 마지막 피연산자의 평가 결과를 반환한다
var x,y,z; 
x=1, y=2, z=3; //3 

7. 그룹 연산자

소괄호로 피연산자를 감싼다
자신의 피연산자인 표현식을 가장 먼저 평가한다
-> 연산자의 우선 순위를 조절할 수 있다 : 그룹 연산자가 연산자 우선순위가 가장 높다

10*2 + 3; 
10 * (2+3);//그룹이 먼저 계산됨

8. typeof 연산자

: 피연산자의 데이터 타입을 문자열로 반환한다
: "string", "number", "boolean", "undefined", "symbol", "object", "function"(함수)
: "null"은 반환 X

ex. typeof NaN // "number"
ex. typeof Symbol() //"symbol"
ex. typeof null // "object"
ex. typeof new Date()//"object"
ex. typeof /test/gi //"object"

cf. null타입인지 확인할 때는 일치 연산자 사용하기
cf. 선언하지 않은 식별자를 typeof 연산자로 연산해보면 ReferenceError가 발생하지 않고 undefined를 반환한다

9. 지수 연산자

  • ES7에서 도입되었다 : 사독성을 위해
  • 좌항의 피연산자를 밑으로 : 음수면 괄호 안에 들어가야 한다
  • 우항의 피연산자를 지수로
  • 이전: Math.pow(밑, 지수)사용
  • **= : 이렇게 할당 연삭자와 함께 사용할 수 있다
  • 이항 연산자 중에서 우선순위가 가장 높다 (괄호보다??)

10. 그외의 연산자

//추후 다른 페이지에서 자세히 다룸

11. 연산자의 부수 효과

부수효과란?
다른 코드에 영향을 주는 것

부수 효과가 있는 연산자
: 할당 연산자, 증가/감소 연산자, delete 연산자

  • 할당 연산자 : 변수 값이 변한다. 해당 변수를 사용하는 다른 코드에 영향
  • 증가//감소 : 마찬가지 (재할당의 개념)
  • delete : 마찬가지. 객체의 프로퍼티를 삭제하는 부수효과

12. 연산자 우선 순위

: 여러 개의 연산자로 이뤄진 문이 실행될 때 연산자가 실행되는 순서
: 높을수록 먼저 실행된다

  • ()
  • new(매개변수 존재), ., [](프로퍼티 접근), ()(함수 호출)

13. 연산자 결합 순서

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

profile
노션 : https://garrulous-gander-3f2.notion.site/c488d337791c4c4cb6d93cb9fcc26f17

0개의 댓글