Skip to content

Latest commit

 

History

History
186 lines (126 loc) · 8.28 KB

README.md

File metadata and controls

186 lines (126 loc) · 8.28 KB

연산자

  • 연산의 대상을 피연산자라고 한다.
  • 피연산자는 값으로 평가될 수 있는 표현식 이어야 한다.
  • 피연산자와 연산자의 조합으로 이뤄진 연산자 표현식도 값으로 평가될 수 있는 표현식이다.
  • 연산의 종류에 따라 피연산자의 값이 바뀌는 경우가 있다.
  • 피연산자의 값을 변경하는 것을 부수효과라고 한다.
  1. 산술 연산자

    • 수학적 계산을 수행해 새로운 숫자값을 만든다.
    • 연산이 불가능한 경우 NaN을 반환한다.
    1. 이항 산술 연산자
    • 2개의 피연산자를 산술 연산하여 숫자 값을 만든다.
    • 부수효과가 없다.
    1. 단항 산술 연산자
    • 1개의 피연산자를 산술 연산하여 숫자값을 만든다.

    • 증가(++) / 감소(--) 의 경우는 피연산자를 변경하는 부수효과가 있다.

    • 증가와 감소는 부호의 위치에 의미가 있다.

    • 숫자가 아닌 타입 중 숫자로 변환할 수 없는 타입에 사용할 경우 NaN을 반환한다.

    • 피연산자 앞에 위치한 전위 증가/감소 연산자는 먼저 피연사자의 값을 증가/감소시킨 후 다른 연산을 수행한다.

    • 피연산자 뒤에 위치한 후위 증가/감소 연산자는 먼저 다른 연산을 수행한 후에 피연사자의 값을 증가/감소시킨다.

      • 연산자
    • 숫자타입의 피연산자에 사용할 경우 아무런 변화가 없다.
    • 숫자타입이 아닌 피연산자에 사용할 경우 피연산자를 숫자 타입으로 변환하여 반환한다.
      • 단 피연산자를 변환하는것은 아니고, 변환한 값을 생성하여 반환한다.
    • 부수효과가 없다.
      • 연산자
    • 숫자 타입의 경우 피연산자의 부호를 반전한 값을 반환한다.
    • 숫자타입이 아닌 피연산자에 사용할 경우 피연산자를 숫자 타입으로 변한한 뒤 부호를 반전한 값을 반환한다.
    1. 문자열 연결 연산자
    • +연산자는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작한다.
    • 그 외에 경우는 위의 산술 연산자로 동작한다.
  2. 할당 연산자.

    • 할당 연산자는 우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당한다.
    • 부수효과가 있다.
    • 할당문은 값으로 평가되는 표현식인 문으로써 할당된 값으로 평가된다.
  3. 비교 연산자

    1. 동등/일치 비교 연산자.
    2. 동등비교
    • 암묵적으로 타입을 일치시킨 뒤 비교한다.
    1. 일치비교
    • 좌항과 우항의 값, 타입을 비교하여 모두 일치할 경우 true 를 반한환다.
    1. 부동등 비교 / 부일치 비교
    • 각각 동등비교, 일치비교의 반대 개념이다.
    1. 대소관계 비교 연산자.
    • 대소 관계에서 비교연산자는 피연산자의 크기를 비교하여 boolean 값을 반환한다.
  4. 삼항 조건 연산자

    • 삼항 연산자는 조건식의 평과 결과에 따라 반환할 값을 결정한다.
    • 자바스크립트의 유일한 삼항 연산자이다.
    • 부수효과는 없다.
    • 표현식은 예제코드를 참조하면 된다.
    • if ... else 문과 유사하지만, 삼항 표현식은 값처럼 사용이 가능하지만, if ... else 문은 표현식이 아닌 문이기 떄문에 값처럼 사용할 수 없다.
  5. 논리 연산자.

    • 논리연산자는 우항과 좌항의 피연산자를 논리 연산한다.

    • 부수효과가 없다.

    • 논리곱과 논리합의 평과 결과는 boolean 값이 아닐수도 있다.

      • 9.4절 단축 평가에서 깊게 확인 가능하다.
    • 논리부정 연산자는 언제나 boolean 값을 반환한다.

    • 드모르간의 법칙을 활용하여 가독성을 개선할 수 있다.

      • !(x || y) === (!x && !y)
      • !(x && y) === (!x || !y)
  6. 쉼표 연산자

    • 쉼표 연산자는 왼쪽 피연산자부터 차례대로 피연산자를 평가한다.
    • 마지막 피연산자의 평가가 끝나면 마지막 피연산자의 결과를 반환한다.
  7. 그룹 연산자

    • 소괄호로 피연산자를 감싼 연산자를 이야기한다.
    • 연산자의 우선순위를 조절할 수 있다.
    • 연산자의 우선순위가 가장 높다.
  8. typeof 연산자

    • typeof 연산자는 피연산자의 데이터 타입을 문자열로 반환한다.
    • string, boolean, undefined, symbol, object, function 중 하나를 반환한다.
    • 데이터 타입과 정확하게 일치하지 않을 수 있다.
    • null 의 경우 object 로 반환한다.
    • 선언하지 않은 식별자를 typeof 연산자로 연산해보면 ReferenceError 가 발생하지 않고, undefined를 반환한다.
  9. 지수연산자.

    • ES7에 도입된 연산자다.
    • 좌항의 피연산자를 밑으로, 우항의 피연산자를 지수로 거듭제곱하여 결과를 반환한다.
    • 좌항의 피연산자에 숫자 반환이 되지 않는 타입이 있다면 NaN을 반환한다.
      • 좌항의 피연산자에 {} 가 있으면 SyntaxError 가 발생된다.
  10. 그 외의 연산자

    1. 옵셔널체이닝
    • 좌항의 피연산자가 null 또는 undefind 인 경우 undefind를 반환하고, 그렇지 않으면 우항의 프로퍼티 참조를 이어간다.
    1. null 병합 연산자
    • 좌항의 피연산자가 null 또는 undefind 인 경우 우항의 피연산자를 반환한다.
    1. 프로퍼티 삭제
    • 객체의 프로퍼티를 삭제한다. 피연산자는 프로퍼티 값에 접근할 수 있는 표연식이여야 한다.
    • 존재하지 않는 프로퍼티를 삭제하려고 한다면 무시된다.
    1. new 연산자
    • 생성자 함수 앞에 사용한다.
    • 생성자 함수일경우 생성자 함수로 동작한다.
    • 내부 메서드 [[Call]] 이 호출되는 것이 아니고 [[Construct]] 가 호출된다.
    • 호출된 함수가 생성자 함수가 아니라면 반환문이 무시된다.
    1. instanceof
    • 이항 연산자로서 우변의 생성자 함수의 prototype 에 바인딩된 객체가 좌변의 객체의 prototype 체인 상에 존재하면 true, 아니면 false로 평가된다.
    1. in
    • 객체 내 특정 프로퍼티가 존재하는지 평가한다.
  11. 연산자의 부수효과

  • 부수효과는 피연산자에 영향을 주는 것을 이야기한다.
  • 할당연산자, 증가/감소 연산자, delete 연산자는 부수효과가 있다.
  1. 연산자의 우선순위
  • 여러 개의 다른 연산자로 이뤄진 문이 실행될 때 연산자가 실행되는 순서를 이야기한다.
  • 연산자의 종류
    1. ()
    2. new(매개변수 존재), [](프로퍼티 접근) ()(함수 호출) ?.(옵셔널 체이닝)
    3. new(매개변수 미존재)
    4. x++, x--
    5. !x, +x, -x, ++x, --x, typeof, delete
    6. ** (이항 연산자 중에서 우선순위가 가장 높다)
    7. *, /, %
    8. +, -
    9. <, <=, >, >=, in, instanceof
    10. ==, !=, ===, !==
    11. ??(null 별합 연산자)
    12. &&
    13. ||
    14. ? ... : ...
    15. 할당 연산자(=,+=, -=, ...)
    16. ,
  • 연산자의 종류가 많아 우선순위를 모두 기억하기 어렵고 실수하기도 쉽다. 따라서 연산자를 모두 기억하기보단 그룹연산자를 이용하여 연산순서를 조절하는 방법을 추천하고 있다.
  1. 연산자의 결합 순서
  • 좌항 또는 우항 중 어떤 피연산자부터 평가할지 나타내는 순서를 이야기한다.
  • 우항 -> 좌항의 경우 우항이 없는 연산자도 포함하고 있는 것 같다. (추정)
  • 좌항 -> 우항 : +, -, /, %, <, <=, >, >=, &&, ||, ., [], (), ??, ?., in, instanceof
  • 우항 -> 좌항 : ++, --, 할당 연산자(=, +=, -=, ...), !x, +x, -x, ++x, --x, typeof, delete, ? ... : ..., **