JS | 연산자 / 제어문 / 타입 변환과 단축 평가

mogooee·2021년 11월 13일
0

연산자

  • 전위증가/감소 연산자 ++X / --X
    : 선 증가/감소 후 할당

  • 후위증가/감소 연산자 X++ / X--
    : 선 할당 후 증가/감소

  • 숫자 타입이 아닌 피연산자에 +,- 단항 연산자를 사용하면 숫자타입으로 변환한 값을 반환한다. 피연산자를 변경하는 것은 아니다.

    let x = '1';
    
    console.log(+x); //1
    console.log(x); //'1' 
  • +연산자는 피연산자 중 하나 이상이 문자열인 경우 타입 강제 변환이 발생해 문자열 연결 연산자로 동작한다. 그 외에는 산술 연산자로 동작한다.

    '1' + 2; //'12'
     
     +undefined; //NaN 
  • 할당문도 표현식이다.

  • ==동등 비교 연산자는 암묵적 타입변환을 통해 타입을 일치 시킨 후 같은 값인지 비교한다.

  • ===일치 비교 연산자는 피연산자의 값뿐만 아니라 타입까지 비교한다. 단 두가지 예외사항이 있는데 NaNisNaN(NaN)함수를 이용해 조사할 수 있다. 또한 0-0true로 반환 한다.

    • ES6에서 도입된 Object.is 메서드는 정확한 비교 결과를 반환한다.

      -0 === + 0; //true
      Object.is(-0, +0);
      
      NaN === NaN; //false
      Object.is(NaN,NaN); //true
  • 삼항 조건 연산자는 표현식이므로 값처럼 사용할 수 있다. if else문과의 차이점으로 볼 수 있으며 조건이 여러 개라면 if...else문의 가독성이 더 좋다.

    조건식? true : false 
    
    let result = x % 2 ? '홀수' : '짝수' ;
  • typeof 연산자는 피연산자의 데이터 타입 7가지 중 하나를 문자열로 반환한다. 하지만 null을 object로 반환하는 등 에러가 발생하므로 null타입은 일치 연산자(===)를 사용한다.

  • 지수 연산자는 이항 연산자 중에서 우선순위가 가장 높다.

    • **
    • Math.pow
  • 연산자 우선순위가 있으므로 그룹 연산자 ()를 사용하여 우선순위를 명시적으로 조절하는 것이 좋다.



제어문

  • 코드 실행 순서가 변경되면 가독성을 해치므로 forEach, map, filter, reduce와 같은 고차 함수를 사용해 제어문의 사용을 억제하고 복잡성을 해결할 수 있다.
  • 조건문
    • if...else문 (참/거짓)
      • 단순히 값을 결정하 변수에 할당하는 경우 삼항 조건 연산자를 사용할 수 있다.
    • switch문 (문자열, 숫자)
      • default문에는 break을 생략한다.
  • 반복문
    • for문
      • 어떤 식도 선언하지 않으면 무한루프가 된다.
    • while문
      • 반복 횟수가 불명확할 때 사용한다.
      • break문으로 종료조건을 설정한다.
    • do...while문
      • 코드 블록을 먼저 실행하고 조건식을 평가한다.
  • break문
    레이블 문, 반복문, switch문의 코드 블록 외에 break문을 사용하면 SyntaxError(문법 에러)가 발생한다.
    • 중첩된 for문에서 외부 for문을 탈출하려면 레이블 문을 사용한다. 레이블 문은 식별자가 붙은 문을 말한다.
      outer:for ( let i = 0; i < 3; i++){
       for ( let j = 0; j < 3; j++){
         if( i + j ===3 ) break outer; 
        }
      }
  • cotinue문
    반복문의 코드 블록 실행을 현 시점에서 중단하고 반복문의 증감식으로 실행 흐름을 이동시킨다. break문처럼 반복문을 탈출하지는 않는다. if문 내에서 실행해야 할 코드가 길다면 continue문을 사용하는 편이 가독성이 더 좋다.



타입 변환과 단축 평가

  • 개발자가 의도적으로 값의 타입을 명시적으로 변환 하는 것을 타입 캐스팅이라 한다.

    • 문자열 타입으로 변환

      1. String 생성자 함수를 new 연산자 없이 호출
       String(1) // "1"
      1. Object.prototype.toString 메서드를 사용
      (1).toString();; // "1"
      1. 문자열 연결 연산자를 이용
        1 + ''; // "1"
    • 숫자 타입으로 변환

      1. Number 생성자 함수를 new 연산자 없이 호출
        Number('0'); // 0
      2. parseInt, parseFloat함수 사용(문자열만 숫자 타입으로 변환 가능)
        parseInt('0'); //0
        parseFloat('10.53'); //10.53 
      3. +단항 산술 연산자를 이용
        +'0'; //0
      4. *산술 연산자를 이용
         '0' * 1; //0 
    • 불리언 타입으로 변환

      1. Boolean 생성자 함수를 new 연산자 없이 호출
        Boolean(''); //false
      2. !부정 논리 연산자를 두 번 사용
        !!'x' //true
  • 원시 값은 변경 불가능한 값이므로 기존의 원시 값을 직접 변경하는 것이 아니고 기존 원시 값을 사용해 다르타입의 새로운 원시 값을 생성하는 것이다.

  • 자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환 되는 것을 타입 강제 변환이라 한다.

    • 문자열 타입으로 변환 (+)

      1 + '2' // '12'
    • 숫자 타입으로 변환 (-, *, / , > , + 산술연산자, 비교연산자, 단항 연산자

       1 - '1' // 0
       +'1' // 1
       +true // 1
       +null // 0
       +undefined // NaN 
       +[] // 0
        +{} // NaN
        +[10, 20] // NaN 
      • 빈 문자열(' '), 빈 배열([]), null, false는 0으로, true는 1로 변환된다. 객체와 빈 배열이 아닌 배열, undefined는 변환되지 않아 NaN이 된다.
    • 불리언 타입으로 변환

      • if문 안의 조건
  • 단축 평가

    • true이면 논리합(||) 연산자는 첫번째, 논리곱(&&) 연산자는 두번째 값을 반환한다. 둘다 좌->우로 평가가 진행된다. 이처럼 피연산자를 타입 변환하지 않고 그대로 반환하는 것을 단축 평가라 한다.

    • if문을 대체 할 수 있다.

    • 옵셔녈 체이닝 연산자 ?.
      : 좌항의 피연산자가 null 또는 undefined인 경우 undefined를 반호나하고, 그렇지 않으면 우항의 프로퍼티 참조를 이어간다. 논리 연산자 &&와 달리 false더라도 unll 또는 undefined가 아니면 우항의 프로퍼티 참조를 이어간다.

    • null 병합 연산자??




[출처]
모던자바스크립트 Deep Dive

profile
개발의 숲

0개의 댓글

관련 채용 정보