연산자 부분은 대부분의 언어가 비슷하기 때문에 중요한 부분만 짚고 넘어가겠습니다.
하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입 지수 연산등을 수행하는것. 이 때 대상을 피연산자 라고한다. 피연산자는 값으로 표현될 수 있는 표현식이어야만 함
산술연산 특이한 부분
1 + 2 = 3;
1 + true = 2; //true 는 1으로 변환
1 + false = 1; //false 는 0으로 변환
1 + null = 1 ; //null 는 0으로 변환
1 + undefined = NaN; //연산 불가능
할당문은 값으로 평가되는 표현식인 문으로서 할당된 값으로 평가된다.
console.log(x=10); //10
a = b = c = 0; //연쇄할당
== //자동 형변환 후 값이 같은지
=== //값과 타입이 같은지
!= //자동 형변환 후 값이 다른지
!== //값과 타입이 다른지
NaN 주의
NaN을 반환하는 연산
/*
숫자로서 읽을 수 없음 (parseInt("어쩌구"), Number(undefined))
결과가 허수인 수학 계산식 (Math.sqrt(-1))
피연산자가 NaN (7 ** NaN)
정의할 수 없는 계산식 (0 * Infinity)
문자열을 포함하면서 덧셈이 아닌 계산식 ("가" / 3)
*/
NaN은 자신과 일치하지 않는 유일한 값
NaN === NaN; // false
Number.NaN === NaN; // false
isNaN(NaN); // true
isNaN(Number.NaN); // true
function valueIsNaN(v) { return v !== v; }
valueIsNaN(1); // false
valueIsNaN(NaN); // true
valueIsNaN(Number.NaN); // true
그러나 isNaN()과 Number.isNaN()의 차이를 주의해야 합니다.
isNaN은 현재 값이 NaN이거나, 숫자로 변환했을 때 NaN이 되면 참을 반환하지만,
Number.isNaN은 현재 값이 NaN이어야만 참을 반환합니다.
조건 ? 참일 때 실행할 코드 : 거짓일 때 실행할 코드;
var low_high = a > 30 ? "크다" : "작다";
삼항조건 연산자는 얼핏보면 if 조건문과 비슷해 보여서 그냥 형태가 다른 if문이구나~ 할 수 있지만
사실은 사용용도부터가 다르다. 삼항조건 연산자는 변수에 할당이 가능한 표현식인 문이기 때문이다.
var low_high = if(a>30){low_high="크다"}else{low_high="작다"}
if문은 위와 같은 형태로는 절대 사용할 수 없다.
if문은 표현식이 아닌 문이고 삼항조건 연산자는 표현식인 문이기 때문이다.
따라서 삼항조건 연산자는 값으로 사용할 수 있다.
&& 논리곱
|| 논리합
! 부정
"DOG"||"CAT" //DOG
"DOG"&&"CAT" //CAT
단축평가
표현식을 평가하는 도중 결과값이 확정된경우 그 뒤에 연산을 하지 않는것. 위에 || 의 결과값을 잘 보자.