29 Mar 2019

ECMAScript6) 표현식과 연산자

표현식과 연산자

목차

연산자

1. 연산자

  • 타 언어와 같이 단항, 이항, 삼항 연산자가 존재한다.
  • 각 연산자는 우선순위를 가진다.

2. 산술 연산자

  • 산술 이항 연산자
    • +, -, *, /, % ; %는 나머지연산
    • 자바스크립트는 정수끼리 나누어도 결과가 부동소수점이 된다.
    • 나머지 연산%의 경우 모두 부동소수점의 연산
    • + 연산의 경우 한 쪽 항이 문자열이면 다른 한쪽 항도 문자열로 만든다.
  • 산술 단항 연산자
    • 종류 : ++, --, +, -
    • ++ 는 증가 연산자
    • -- 는 감소 연산자
    • + 는 아무 처리 없음 연산자
    • - 는 부호 반전 연산자
    • 예시

        var a = 1;
        b = ++a;  // b는 2, a도 2
        c = a++ + 2; // c는 4, a는 3이 된다.
      
  • 산술 대입 연산자
    • 종류 : +=, -=, *=, /=, %=
    • a += 1 는 a = a + 1
    • a -= 1 는 a = a - 1
    • a /= 1 는 a = a / 1
    • a %= 1 는 a = a % 1

3. Math 객체의 프로퍼티

  • 자바스크립트의 수학계산을 위한 전역 객체 (기본제공)
  • 생성자가 아닌, 전역객체 (모든 프로퍼티와 메소드는 정적이다.)
  • .cos(), .PI 등 프로퍼티와 메쏘드를 가지고 있음.
  • 참고

문자열 제어

1. 문자열 연결

  • + 연산자의 피연산자가 모두 문자열이면 문자열로 연결
  • + 연산자의 피연산자 중 하나가 문자열이 아니라면, 문자열로 반꾼 후 연결

      var a = "Hello" + "Hello";  // "HelloHello"
      var b = 1 + "일"; "1일"
    

2. 문자열을 처리하기 위한 객체 String

  • 문자열을 String 객체로 변환하기 위해 String 생성자를 사용

      var msg = new String("string for String object");
    
  • 이처럼 원시 값을 객체로 변환하는 행위를 가리켜 원시값을 객체로 래핑(wrapping) 한다고 한다.
  • String 객체에는 문자열을 처리하기 위한 다양한 프로퍼티와 메써드가 있다. 참고
  • 중요 메소드는 match(regExp), slice(m, n), split(s), indexOf(s), toLowerCase(s), toUpperCase(s), length 가 있다.

  • 인덱싱이 가능하다. 3번자 글자에 접근하려면 msg.charAt(3)
  • 모든 String의 메소드와 프로퍼티는 문자열에서 사용가능하다.
  • 또한 일반 문자열에서 String 객체의 프로퍼티나 메서드를 사용하면 일시적으로 String 객체로 래핑된 이후, 메서드를 실행하고, 메모리에서 삭제된다. 이러한 일시적인 객체를 래퍼 객체 라고 한다.
  • 자바스크립트는 원시 값을 처리할 때 원시 값을 자동으로 래퍼객체로 변환하고, 래퍼객체의 기능을 활용해서 다양한 작업을 수행한다.
  • 덧붙여, 자바스크립트의 문자열은 불변(immutable)이다. replacetoUpperCase 와 같은 메서드의 경우 새로운 문자열을 반환할 뿐, 기존의 문자열을 수정하지는 않는다.

3. 문자열을 배열로 읽고 쓰기

  • 문자열 접근에는 .charAt() 메서드 대신에 [] 를 통한 접근이 가능하다.
  • 하지만 []를 통한 인덱싱으로 값을 대입하고자 하면 무시된다.

논리 연산자와 관계 연산자

1. 관계 연산자

  • 관계 연산자는 두 개의 피연산자를 비교해서 결과를 논리값 (true/false)로 반환함.
  • 제어구조(if, for, while)문을 만들 때 자주 사용됨
  • ==, !=, ===, !==, <, >, <=, >= 가 존재한다.
    • == 값이 같음 (느슨한 비교)

      좌우 피연산자의 타입이 같을 때

      • 값이 같으면 true, 다르면 fasle
      • 객체 타입 변수의 경우 객체의 참조이므로 참조까지 같으면 true 다르면 false

      좌우 피연산자의 타입이 다를 때

      • 타입 상관없이 같으면 true
      • undefinednull을 같을 것으로 친다.
      • true 는 1로, false는 0으로 변환해서 비교
          1 == "1"  // true
          null == undefined  // true
          true == 1  // true
          [2] == 2  // true
        
    • === 값과 타입이 같음 (엄격한 비교)
      • 타입변환을 하지 않은 채 엄격하게 비교
      • true를 1로, false를 0으로 변환하지 않음
      • 그냥 무조건 두개가 같아야 함.

        1 === "1"  // false
        null === undefined  // false
        true === 1  // false
        [2]  === 2  // false
        
    • != 값이 다름
    • !== 값과 타입이 다름
    • < 작음
    • >
    • <= 작거나 같음
    • >= 크거나 같음

2. 논리 연산자

  • &&, ||, !
  • 빈 문자열"", 0, -0, NaN, null, undefined 는 모두 false

3. 기타 연산자

  • typeof : 데이터 타입 조사
  • new : 새로운 객체 선언 연산자
  • in : 객체의 프로퍼티 포함 여부 확인 연산자
  • delete : 객체의 프로퍼티나 배열 요소 제거 연선자
  • instanceof : 객체의 종류 확인 연산자
  • eval() : 인수로 받은 문자열을 자바스크립트 코드로 실행 - 사용하지 않는 것이 권장됨. (해킹의 위험, 속도가 느림, 굳이 사용할 필요 없음)

4. 조건 연산자

  • ?:

      var parity = (a % 2 == 0)? "짝수" : "홀수";
    
  • 앞의 표현식이 참일 경우 “짝수”, 거짓일 경우 “홀수”

명시적 타입변환

1. 숫자를 문자로 변환

  • Number 객체의 메소드 활용
    • .toString()
    • .toFixed( num ) 소수점 자리를 인수로 주어 거기까지만 문자열로 변환

      var a = 13.23;
      a.toString();  // "13.23"
      a.toFixed(1);  // "13.2"
      
  • String() 함수를 활용
    • new 연산자와 함께 쓰면 객체 생성자로 사용가능하지만, new 연산자 없이 사용하면 일반 함수로 사용가능하다.

      String(26)  // -> "26"
      

2. 문자를 숫자로 변환

  • 수식 안에서 암묵적으로 변환

      var s = "2";
      s - 0;  // -> 2
    
  • parseInt, parseFloat 함수 사용
  • 숫자 뒤 문자가 있을 경우 문자부분 무시
  • 문자를 숫자로 해석할 수 없을 때는 NaN을 반환

      parseInt("3.14");  // -> 3
      parseFloat("3.14");  // -> 3.14
      parseInt("3 metter");  // -> 3
      parseInt("ABC");  // -> NaN
    
  • Number 함수를 사용
  • new 연산자 없이 사용하면 객체 생성함수가 아닌 일반 함수로 사용가능

      Number("123");  // -> 123
      Number(true);  // -> 1
      Number(false);  // -> 1
    

Tags: