javascript 연산은 우선 순위가 높은 것부터 실행된다.
1 - 괄호 - ()
2 - 증감/논리 연산자/not - ++ -- !
3 - 산술 연산자 곱셈 - / %
4 - 산술 연산자 덧셈 - + -
5 - 비교 연산자 대소 - < <= > >=
6 - 비교 연산자 같음 - == === != !==
7 - 논리 연산자 and - &&
8 - 논리 연산자 or - ||
9 - 대입 연산자 - = += -= = /= %=ex) 3 ** 2 + 1 = 27이 되기 위해서는? 3 ** (2 + 1) 위 처럼 괄호를 적극 사용해야한다.
0.3 - 0.1
>>> 0.1999999998
0.2 + 0.1
>>> 0.3000000004
why?
부동 소수점 문제 때문에 위 현상이 발생한다.
위 상황을 개선하기 위해서는 "소수를 정수로 바꿔 계산해준 뒤, 정수를 소수로 바꾼다."
(0.3 * 10 - 0.1 * 10) / 10;
>>> 0.2
true 와 false 로 값을 반환하는 형태
true 와 false는 문자열이 아니기 때문에 따옴표로 감싸지 않는다.
ex)
5 <= 4
>>> false
5 == 5
>>> true
NaN은 NaN과 비교하면 false가 나온다.
그러나 같지 않다고 하면 true가 나온다.
NaN == NaN
>>> false
NaN != NaN
>>> true
'ab' > 'a'
>>> true
첫 문자가 a 이므로, 두 번째 값을 비교한다.
그런데 ab에서 2번째 문자는 b지만, 'a'에는 2번째 문자가 없습니다.
이 경우에는 다음 문자가 존재하는 값이 더 큽니다.
'abc' < 5
>>> false
'3' < 5
>>> true
문자열은 NaN이기 때문에, NaN과의 비교는 모두 false이다.
그리고 숫자와 비교하는 문자열은 정수로 바뀌어 비교된다.
문자의 번호를 알아보려면 .charCodeAt을 사용한다.
찾고자 하는 문자열 뒤에 .charCodeAt()을 붙이면 문자의 번호가 나온다.
'a'.charCodeAt()
>>> 97
자료형이 다른 경우에는 형 변환을 한 후 비교하기 때문에 앞의 예제에서 모두 true가 출력된다.
이러한 특성은 외우기도 힘들 뿐더러 값을 비교하려는 취지에 맞지 않는 경우도 있다.
그래서 자료형까지 같은지 비교하는 연산자는 따로 있다.
바로 ===이다.
값을 비교할 때 뿐만 아니라 자료형까지도 같은지 비교한다.
'1' === 1;
>>> false
1 === true;
>>> false
1 === '1';
>>> false
1 === '1';
>>> true
1 != '1';
>>> false
1 !== '1'
>>> true