산술, 논리 연산자 뿐 아니라 쉼표 연산자, 그룹 연산자 등도 연산자임을 인지하고 유심히 살펴보자.
'1' + 2 // '12'
1 + '2' // '12'
123 + '' // '123'
+'123' // 123
1 + null // 1
1 + undefined // NaN (undefined는 숫자로 타입 변환 되지 않는다.)
할당 연산자는 좌항의 변수에 값을 할당하므로 변수 값이 변하는 부수효과가 있다.
할당문은 값으로 평가되는 표현식인 문으로서 할당된 값으로 평가된다.
동등비교 연산자 ==
: 타입 변환을 해서 같은 값인지 비교
일치비교 연산자 ===
: 값과 데이터 타입도 함께 비교
주의
NaN === NaN // false
Number.isNan(NaN) // true
Object.is(NaN, NaN) // true
isNaN(undefined) // true
isNaN(null) // false
isNaN(-NaN) // true
isNaN({}) // true
Number.isNaN(undefined) // false
일치 비교연산자를 사용해도 항상 같지 않다.
그러므로 Number.isNaN이나 Object.is 메소드를 사용한다.
조건식 ? 조건식이 true 일 때 반환할 값 : 조건식이 false 일 때 반환할 값
if ... else문
과 삼항 조건 연산자 표현식이 비슷해보이나 차이가 있다.
삼항 연산자는 표현식이기 때문에 값처럼 사용할 수 있다. 그라나if ... else문
은 그렇지 않다.
삼항 연산자는 표현식은 값으로 평가될 수 있는 표현식인 문이다.
논리 연산자 | 의미 | 부수 효과 |
---|---|---|
II | 논리합(or) | X |
&& | 논리곱(and) | X |
! | 부정(NOT) | X |
9.4절 단출 평가에서 자세히
// 드 모르간 법칙
!(x || y) === (!x && !y)
!(x && y) === (!x || !y)
왼쪽 피연사부터 차례대로 피연산자를 평가하고 마지막 피연산자의 평가가 끝나면 마지막 피연산자의 평가결과를 반환한다.
function foo() {
var x, y;
return x = 1, y = 2, console.log(x), console.log(x*y), x+y // 3
}
foo()
1
2
<-3 // 마지막 피연산자의 평가 결과 반환
typeof NaN // number
typeof null // object
옵셔널체이닝 연산자, null 병합 연산자, delete연산자, new연산자. instanceof 연산자, in 연산자는 추후 자세히
부수효과가 있는 연산자
할당 연산자, 증가/감소 연산자, delete 연산자