자바스크립트 표현식과 연산자
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는 다음과 같다.
- undefined
- null
- false
- 0
- NaN
- ”“(빈 문자열)
- 이들 외에는 모두 true
- 빈 배열(단 빈 배열인 경우, arr.length는 0이므로 false)
- 공백이 있는 문자열(“ “)
- 문자열 “false”
- 객체
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에서 새로 도입한 기능으로 객체나 배열을 변수로 ‘해체’할 수 있다.
- 객체를 해체할 때는 반드시 변수 이름과 객체의 프로퍼티 이름이 일치해야 한다.
- 객체 해체 할당 예제
- 배열을 해체할 때는 배열 요소에 대응할 변수 이름을 마음대로 쓸 수 있으며, 배열 순서대로 대응한다.
- 배열 해체 할당 예제