Chapter3. 연산자

산술 연산자

  • 모두 두 개의 피연산자를 갖는 이항 연산자.

  • 피연산자의 결합 방향은 왼쪽에서 오른쪽이다.

  • 아래는 연산자 우선순위 표다.

우선순위

연산자

설명

결합 방향

1

()

묶음(괄호)

-

2

.

멤버 접근

왼쪽에서 오른쪽으로

new

인수 있는 객체 생성

-

3

()

함수 호출

왼쪽에서 오른쪽으로

new

인수 없는 객체 생성

오른쪽에서 왼쪽으로

4

++

후위 증가 연산자

-

--

후위 감소 연산자

-

5

!

논리 NOT 연산자

오른쪽에서 왼쪽으로

~

비트 NOT 연산자

오른쪽에서 왼쪽으로

+

양의 부호 (단항 연산자)

오른쪽에서 왼쪽으로

-

음의 부호 (단항 연산자)

오른쪽에서 왼쪽으로

++

전위 증가 연산자

오른쪽에서 왼쪽으로

--

전위 감소 연산자

오른쪽에서 왼쪽으로

typeof

타입 반환

오른쪽에서 왼쪽으로

void

undefined 반환

오른쪽에서 왼쪽으로

delete

프로퍼티의 제거

오른쪽에서 왼쪽으로

6

**

거듭제곱 연산자

오른쪽에서 왼쪽으로

*

곱셈 연산자

왼쪽에서 오른쪽으로

/

나눗셈 연산자

왼쪽에서 오른쪽으로

%

나머지 연산자

왼쪽에서 오른쪽으로

7

+

덧셈 연산자 (이항 연산자)

왼쪽에서 오른쪽으로

-

뺄셈 연산자 (이항 연산자)

왼쪽에서 오른쪽으로

8

<<

비트 왼쪽 시프트 연산자

왼쪽에서 오른쪽으로

>>

부호 비트를 확장하면서 비트 오른쪽 시프트

왼쪽에서 오른쪽으로

>>>

부호 비트를 확장하지 않고 비트 오른쪽 시프트

왼쪽에서 오른쪽으로

9

<

관계 연산자(보다 작은)

왼쪽에서 오른쪽으로

<=

관계 연산자(보다 작거나 같은)

왼쪽에서 오른쪽으로

>

관계 연산자(보다 큰)

왼쪽에서 오른쪽으로

>=

관계 연산자(보다 크거나 같은)

왼쪽에서 오른쪽으로

instanceof

인스턴스 여부 판단

왼쪽에서 오른쪽으로

10

==

동등 연산자

왼쪽에서 오른쪽으로

===

일치 연산자

왼쪽에서 오른쪽으로

!=

부등 연산자

왼쪽에서 오른쪽으로

!==

불일치 연산자

왼쪽에서 오른쪽으로

11

&

비트 AND 연산자

왼쪽에서 오른쪽으로

12

^

비트 XOR 연산자

왼쪽에서 오른쪽으로

13

|

비트 OR 연산자

왼쪽에서 오른쪽으로

14

&&

논리 AND 연산자

왼쪽에서 오른쪽으로

15

||

논리 OR 연산자

왼쪽에서 오른쪽으로

16

? :

삼항 연산자

오른쪽에서 왼쪽으로

17

=

대입 연산자 (=, +=, -=, *=, /=, %=, <<=, >>=, >>>=, &=, ^=, |=)

오른쪽에서 왼쪽으로

18

...

전개

-

19

,

쉼표 연산자

왼쪽에서 오른쪽으로

대입 연산자

대입 연산자

설명

=

왼쪽 피연산자에 오른쪽 피연산자의 값을 대입함.

+=

왼쪽 피연산자의 값에 오른쪽 피연산자의 값을 더한 후, 그 결괏값을 왼쪽 피연산자에 대입함.

-=

왼쪽 피연산자의 값에서 오른쪽 피연산자의 값을 뺀 후, 그 결괏값을 왼쪽 피연산자에 대입함.

*=

왼쪽 피연산자의 값에 오른쪽 피연산자의 값을 곱한 후, 그 결괏값을 왼쪽 피연산자에 대입함.

/=

왼쪽 피연산자의 값을 오른쪽 피연산자의 값으로 나눈 후, 그 결괏값을 왼쪽 피연산자에 대입함.

%=

왼쪽 피연산자의 값을 오른쪽 피연산자의 값으로 나눈 후, 그 나머지를 왼쪽 피연산자에 대입함.

증감 연산자

증감 연산자

설명

++x

먼저 피연산자의 값을 1 증가시킨 후에 해당 연산을 진행함.

x++

먼저 해당 연산을 수행하고 나서, 피연산자의 값을 1 증가시킴.

--x

먼저 피연산자의 값을 1 감소시킨 후에 해당 연산을 진행함.

x--

먼저 해당 연산을 수행하고 나서, 피연산자의 값을 1 감소시킴.

증감 연산자의 연산 순서

  • 피연산자의 어느 쪽에 위치하는가에 따라 연산의 순서가 다라진다.

  • C언어와 같으니깐 느낌적인 느낌으로 가면 된다.

비교 연산자

  • 비교 연산자는 피연산자 사이의 상대적인 크기를 판단하여 참, 거짓을 반환한다.

  • 비교 연산자

    설명

    ==

    왼쪽 피연산자와 오른쪽 피연산자의 값이 같으면 참을 반환함.

    ===

    왼쪽 피연산자와 오른쪽 피연산자의 값이 같고, 같은 타입이면 참을 반환함.

    !=

    왼쪽 피연산자와 오른쪽 피연산자의 값이 같지 않으면 참을 반환함.

    !==

    왼쪽 피연산자와 오른쪽 피연산자의 값이 같지 않거나, 타입이 다르면 참을 반환함.

    >

    왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 크면 참을 반환함.

    >=

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

    <

    왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 작으면 참을 반환함.

    <=

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

동등 연산자와 일치 연산자

  • 동등연사자(==)

    • 두 피연산자의 값이 서로 값으면 참을 반환한다.

    • 타입이 서로 다르면 강제로 타입을 같게 변환하고, 값ㅇ르 비교한다.

  • 일치연산자(===)

    • 타입의 변환 없이 두 피연산자의 값이 같고, 타입도 같아야만 참을 반환

var x = 3, y = '3', z = 3;
document.write((x == y) + "<br>");  // x와 y의 타입이 서로 다르므로 타입을 서로 같게 한 후 비교를 하므로 true
document.write((x === y) + "<br>"); // x와 y의 타입이 서로 다르므로 false
document.write(x === z);            // x와 z은 값과 타입이 모두 같으므로 true

논리 연산자

논리 연산자

설명

&&

논리식이 모두 참이면 참을 반환함. (논리 AND 연산)

||

논리식 중에서 하나라도 참이면 참을 반환함. (논리 OR 연산)

!

논리식의 결과가 참이면 거짓을, 거짓이면 참을 반환함. (논리 NOT 연산)

  • 아래는 진리표다.

A

B

A && B

A || B

!A

true

true

true

true

false

true

false

false

true

false

false

true

false

true

true

false

false

false

false

true

기타 연산자

문자열 결합 연산자

  • 덧셈 연산자는 피연산자의 타입에 따라 두 가지 연산

    1. 둘 다 숫자면, 산술 연산

    2. 하나라도 문자열이면 문자열 결합

삼항 연산자

  • 표현식 ? 반환1 : 반환2

delete 연산자

  • 피연산자인 객체, 객체의 프로퍼티 또는 배열의 요소 등을 삭제해준다.

  • 삭제를 성공하면 true, 못하면 false

  • var arr = [1, 2, 3];          // 배열 생성
    delete arr[2];                // 배열의 원소 중 인덱스가 2인 요소를 삭제함.
    document.write(arr + "<br>"); // [1, 2, ]
    // 배열에 빈자리가 생긴 것으로 undefined 값으로 직접 설정된 것은 아님.
    document.write(arr[2] + "<br>");
    // 배열의 요소를 삭제하는 것이지 배열의 길이까지 줄이는 것은 아님.
    document.write(arr.length);

typeof 연산자

  • 타입을 리턴해줌

    typeof 연산자의 결괏값

    숫자, NaN

    "number"

    문자열

    "string"

    true, false

    "boolean"

    null

    "object"

    undefined

    "undefined"

    함수

    "function"

    함수가 아닌 객체

    "object"

instanceof 연산자

  • 피연산자인 객체가 특정 객체의 인스턴스인지 아닌지를 확인해줌

  • var str = new String("이것은 문자열입니다.");
    str instanceof Object;  // true
    str instanceof String;  // true
    str instanceof Array;   // false
    str instanceof Number;  // false
    str instanceof Boolean; // false