자바스크립트 표현식과 연산자

2018-02-03

1. 증가연산자와(++) 감소연산자(--)

2. 비교연산자

  • 일치(===) : 두 값이 같은 객체를 가리키거나, 같은 타입이고 값도 같은 경우(원시타입)
  • 동등(==) : 두 값이 같은 객체를 가리키거나 같은 값을 갖도록 변환할 수 있는 경우(“33”==33)
  • 동등연산자보다는 일치연산자를 사용하는게 더 좋다.
  • 객체 a,b에 같은 정보가 들어 있더라도 그들은 서로 다른 객체이며, 일치하지도 않고 동등하지도 않는다.
  • 비교연산자 예제

3. 숫자 비교

  • NaN은 자신을 포함하여 무엇과도 같지 않다. 즉 NaN === NaN, NaN == NaN 은 모두 false이다.
  • 숫자가 NaN인지 알아보려면 isNaN(x)을 사용한다. x가 NaN일 때는 true 그렇지 않다면 false를 반환한다.
  • 자바스크립트의 숫자는 모두 더블 형식이다.
  • 자바스크립트에서 정수를 비교할 때, 그 정수가 안전한 범위라면(Number.MIN_SAFE_INTEGER이상, Number.MAX_SAFE_INTEGER이하) 안심하고 일치 연산자를 사용할 수 있다.
  • 하지만 소수점이 있는 숫자를 비교할 때는 대상 숫자에 ‘충분히 가까운지’ 확인하는 편이 좋다. (Number.EPSILON 사용)
  • Number 개체 상수 참고
  • 숫자 비교 예제


4. 문자열 병합

  • 자바스크립트는 피연산자의 타입을 보고 덧셈을 할지 문자열 병합을 할지 판단한다.
  • 덧셈과 병합은 모두 왼쪽에서 오른쪽으로 평가한다.
  • 피연산자 중 하나라도 문자열이면 병합을 수행하고 두 값이 모두 숫자형인 경우 덧셈을 한다.
    3 + 5 + "8" // "88"
    "3" + 5 + 8 // "358"
    



5. 논리 연산자

  • 자바스크립트에서 false는 다음과 같다.
    1. undefined
    2. null
    3. false
    4. 0
    5. NaN
    6. ”“(빈 문자열)
  • 이들 외에는 모두 true
    1. 빈 배열(단 빈 배열인 경우, arr.length는 0이므로 false)
    2. 공백이 있는 문자열(“ “)
    3. 문자열 “false”
    4. 객체

6. 쉼표 연산자

표현식을 하나 이상 실행해야 하지만 값으로 필요한 것은 마지막 표현식의 결과뿐일 때 쉼표 연산자를 유용하게 쓸 수 있다.

let x = 0, y = 10, z;
z = (x++, y++);
  • 해당 예제에서는 x와 y 모두 1만큼 늘어나지만, z의 값은 10, 즉 y++가 반환된다.
  • 쉼표 연산자는 우선순위가 가장 낮은 연산자이므로 괄호를 사용한다.

7. AND, OR, NOT

  • 자바스크립트가 지원하는 논리 연산자는 AND(&&), OR(||), NOT(!) 세 가지

8. 비트연산자

  • 비트연산자는 피연산자를 2의 보수 형식으로 저장된 32비트 부호 붙은 정수로 간주한다.
  • 자바스크립트의 숫자는 모두 더블 형식이므로 비트 연산자를 실행하기 전에 숫자를 먼저 32비트 정수로 변환하고, 결과를 반환할 때 다시 더블 형식으로 반환한다.
  • 비트 연산자는 논리 연산자 AND, OR, NOT 같은 논리 연산을 하지만 이 연산을 정수의 개발 비트에서 수행한다.
  • 이 외에 비트를 다른 위치로 옮기는 시프트 연산자도 있다
    &   : 비트 AND 	 (0b1010 & 0b1100 -> 0b1000)
    |   : 비트 OR 	 (0b1010 | 0b1100 -> 0b1110)
    ^   : 비트 XOR	 (0b1010 ^ 0b1100 -> 0b0110)
    ~   : 비트 NOT 	 (~0b1010 		 -> 1b0101)
    <<  : 왼쪽 쉬프트  (0b1010<<1 // 결과: 0b10100, 0b1010<<2 // 결과: 0b101000 )
    >>  : 오른쪽 쉬프트(부호 따라감)
    >>> : 0으로 채우는 오른쪽 쉬프트
    
  • 오른쪽 쉬프트 예제

9. typeof 연산자

  • 피연산자의 타입을 나타내는 문자열을 반환한다.
  • typeof null은 “object”라고 판단한다.
  • typeof 배열 또는 객체 역시 “object”
    typeof undefined	"undefined"
    typeof null 		"object"
    typeof {}			"object"
    typeof true			"boolean"
    typeof 1			"Number"
    typeof ""			"String"
    typeof Symbol()		"symbol"	//ES6에서 새로 생김
    typeof function(){}	"function"
    



10. 간편 할당 연산자

x += y 		x = x + y
x -= y		x = x - y
x *= y		x = x * y
x /= y		x = x / y
x %= y		x = x % y
x <<=y		x = x << y
x >>=y		x = x >> y
x >>>=y		x = x >>> y
x &= y		x = x & y
x |= y		x = x | y
x ^= y		x = x ^ y



11. 해체 할당

  • ES6에서 새로 도입한 기능으로 객체나 배열을 변수로 ‘해체’할 수 있다.
  • 객체를 해체할 때는 반드시 변수 이름과 객체의 프로퍼티 이름이 일치해야 한다.
  • 객체 해체 할당 예제
  • 배열을 해체할 때는 배열 요소에 대응할 변수 이름을 마음대로 쓸 수 있으며, 배열 순서대로 대응한다.
  • 배열 해체 할당 예제