ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바스크립트의 기본 연산자
    Let's Code/JavaScript 2021. 3. 6. 19:34
    모던자바스크립트 2.7 ~ 2.9 (ko.javascript.info/first-steps)

     

     

     

    형 변환

     

    형 변환(Type Conversion): 적절한 자료형으로 자동으로 변환하는 과정

    - alert 메서드는 자동으로 전달받은 값을 문자형(string)으로 변환

    - 수학 연산자 (+, -, *, /)는 자동으로 값을 숫자형으로 변환하여 계산: 이 때 null은 0, boolean은 0 혹은 1, 숫자 이외의 값이 포함된 string 혹은 undefined의 경우 NaN으로 변환

    - 논리 연산은 자동으로 값을 불린형으로 변환하여 연산을 수행: 0/빈 문자열/null/undefined/NaN 외엔 모두 true ("0"도 true)

     

    기본 산술 연산자

    - 피연산자(operand): 연산이 수행되는 대상, 인수(argument)라고도 불림

    - 단항/이항 연산자 (unary operator/binary operator): 피연산자가 하나인 연산자는 다항, 둘인 연산자는 이항

    - 나머지 연산자 (Remainder operator) %: a % b는 a를 b로 나눈 후 나머지를 반환

    - 거듭제곱 연산자 (exponentiation operator) **: a ** b는 a를 b번 곱한 값을 반환, 1/2 등 분수를 사용하면 제곱근 도출 가능

     

    자바스크립트의 연산자

    - 이항 덧셈 연산자 + 는 문자열을 연산할 경우 덧셈이 아니라 문자열 병합을 수행, 이 때 한 피연산자만 문자열일 경우 나머지 연산자를 자동 문자열로 변환

    alert(2 + 2 + '1');

    답은 41이며, 연산은 왼쪽부터 순차적으로 진행되기 때문

     

    - 뺄셈, 나눗셈 연산자는 반대로 문자열을 숫자로 변환한 후 산술 연산 진행

    - 단항 덧셈 연산자는 문자열을 숫자로 변환 (Number 함수와 동일한 역할)

    let apples = "2";
    let oranges = "3";
    alert (apples + oranges);
    alert ( +apples + +oranges);

    답은 각각 "23"과 5

     

    할당 연산자 (Assignment)

    - 할당 연산자 = 는 변수에 값을 저장하고, 이를 반환하는 할당 연산자로서 기능

    - 복합 할당 연산자인 +=, *=, -= 을 사용하면 저장된 값에 숫자를 연산해 재할당 (modify-and-assign)할 수 있다.

    let n = 2;
    n += 5;
    n *= 2;
    
    alert ( n ); // 14

     

    증가/감소 연산자 (Increment/decrement)

    - 증가 연산자(increment) ++는 변수를 1 증가시킨다.

    - 감소 연산자(decrement) --는 변수를 1 감소시킨다.

    - 증가/감소 연산자는 변수에만 쓸 수 있다. (5++는 불가)

    - counter++처럼 피연산자 뒤에 올 때는 후위형 (postfix form), ++counter처럼 앞에 올 때는 전위형 (prefix form)이라고 한다.

    - 반환 시 전위형은 증가/감소 후 새로운 값을 반환하지만, 후위형은 이전 값을 반환한다. 즉, 연산을 수행하며 반환값 = result를 즉각적으로 볼 수 있는 것은 전위형, 연산만 수행하는 것은 후위형.

    - 이 때, c = ++a 식으로 증가 연산자의 값을 별도 변수로 반환할 경우에도, 연산이 수행되어 c뿐만 아니라 변수 a의 값도 1 증가한다.

    let counter = 0;
    counter++;
    ++counter;
    alert ( counter ); // 2
    
    let counter = 3
    alert (++counter); // 4
    alert (counter++); // 3

     

    연산자 우선순위 (Operator precedence)

    - 같은 연산자의 경우 단항 연산자는 이항 연산자보다 우선순위

    - 이항 연산자 중 우선순위는 ** > * > / > + > - 순

    - 할당 연산자의 우선순위는 다른 연산자 대비 낮으므로, 보통 연산이 끝난 후 값을 할당

    - 증가/감소 연산자는 타 연산자보다 우선순위가 높으므로, 피연산자로 사용될 수 있다. (그러나 한 줄에 한 액션만 수행하는 것이 가독성 좋은 코드이므로 권장되지는 않는다.)

     

    비트 연산자 (Bitwise Operator)

    - 비트 연산자는 피연산자를 32비트 정수로 변환하여 이진 연산을 수행한다.

    - 저수준에서 숫자를 다룰 때 쓰이며, 웹개발에서는 거의 쓰이지 않는다.

     

    쉼표 연산자 (Comma operator)

    - 쉼표 연산자는 여러 표현식을 한 줄에서 평가할 수 있게 하며, 할당 연산자보다 우선순위가 낮으므로 마지막 값만 반환한다.

    let a = (1 + 2, 3 + 4);
    alert ( a ); // 7

    아래 경우처럼 여러 동작을 처리하고 싶지만, 마지막 표현식만 남기고 싶을 때 사용한다.

    for (a = 2, b = 3, c = a * b; a < 10; a++) {
    ...
    }

     

     

    비교 연산자 (Comparisons)

    - >, <, >=, <=, ==, != 등이 있다.

    - 불린형으로 값을 반환하며, 반환 후 변수에 할당할 수 있다.

    - 문자의 경우 사전 순으로 (lexicographical) 문자열을 비교하므로, 알파벳 뒤쪽의 문자열이 앞쪽보다 크다고 판단된다.

    - 제일 앞 글자부터 한 글자씩 평가하며, 문자가 일치할 경우 길이가 긴 문자열이 더 크다고 판단한다.

    - 대문자보다 소문자가 더 크다. (유니코드 순이기 때문) 

    - 비교하려는 값의 자료형이 다를 경우 숫자형으로 변환하여 비교한다. (아래와 같은 특이한 상황이 발생하기도 한다.)

    let a = 0;
    alert( Boolean(a) ); // false
    
    let b = "0";
    alert( Boolean(b) ); // true
    
    alert (a == b); // true

     

    - 일반 동등 연산자 (equality operator) == 가 아닌 일치 연산자(strict equality operator) ===을 사용하면 자료형의 동등 여부까지 검사하여 위와 같은 경우를 막을 수 있다.

    - 동등 연산자는 피연산자가 undefined이나 null 일 때 형 변환을 하지 않기 때문에 서로를 비교하는 것이 아닌 이상 무조건 false를 반환한다. 

    - 반면 산술 연산자나 기타 비교 연산자에서는 null을 0, undefined를 NaN으로 변환한다.

    댓글