[2.7,2.8,2.9,2.10,2.11,2.12]
연산자에 들어가기 앞서 형변환을 먼저 알아보자
함수와 연산자에 전달되는 값은 자동으로 적절한 자료형으로 변환된다.(자동 형변환)
이 외에 값을 의도를 갖고 원하는 타입으로 변환해주는 것을 명시적 형 변환이라고 한다.
String(value) 형태로 사용
a = true
typeof a => boolean
b = String(a)
typeof b => string
Number(value) 형태로 사용
Number("123") => 123
숫자 이외의 글자를 숫자형으로 변환하려고 하면 결과는 NaN이 된다.
Number(undefined) => NaN
Number(null) => 0
Number(true/false) => 1/0
Number("") => 0
논리 연산을 수행할 때 발생한다.
직관적으로 비어있다고 느껴지는 값들은 false가 된다.
"1" + "2" => "12"
5+'2' => 52
5-'2' => 3
2+2+'1' => 41
+true => 1
-true => -1
let a = (1+2,3+4)
a => 7
이게 무슨 의미일까... ?
이거는 사실 코드를 짧게 쓰는 방법 중이 하나다.
표현식 각각은 모두 평가되지만, 마지막 표현식의 결과만 반환된다는 점이 특이하다.
이 기능을 언제 사용할까?
for(a=1,b=3,c=a*b;a<10;a++){
...
}
이런식으로 사용하면 된다.
하지만 가독성이 좋지 않기 때문에 크게 추천하진 않는다.
> < != ==
등을 사용하면, 불린형으로 반환한다.
문자열을 비교하면, 사전 순으로 문자를 비교한다. 즉 사전의 앞쪽에 있다면 더 작은 것이다.
'Z' > 'A'
=> true
서로 자료형이 다르다면, js는 이 값들을 숫자로 바꿔서 계산한다.
'01' == 1
=> true
true 는 1 , false는 0으로 변환된다.
==
동등 연산자는 0과 false를 구분하지 못한다.
=> 피연산자를 숫자형으로 바꾸기 때문에 발생한다.
===
일치 연산자를 사용하면, 엄격하게 동등 여부를 판단한다.
지금부터 머리 아파집니다~
null == undefined => true
null > 0 => false
null == 0 => false
null >= 0 => true
?? 이러한 이유가 나타나는 이유는 동작방식이 달라서 그렇다
null이 숫자로 변환되어 0이 되기때문에 세번째는 맞다고 표시된다.
undefined > 0 => false
undefined < 0 => false
undefined == 0 => false
let accessAllowed = (age > 18) ? true : false;
물을표 연산자는 조건에 따라 값을 달리하려는 목적으로 만들어졌으나,
여러줄로 나눠져 if else 로 적힌 코드가 더 읽기 좋을 수 있다.
여러 분기를 만들어 처리를 할때는 if를 이용하는 것이 더 보기좋다.
js에는 세가지의 논리 연산자가 존재한다.
&&
AND
||
OR
!
NOT
여러개를 chaining 해서 사용한다면 처음 나오는 truthy가 반환되고 존재하지 않는다면 마지막 피연산자를 반환한다.
a,b가 없고 c가 있기 때문에 c를 반환한다
let a = ""
let b = ""
let c = "hi"
let d = a || b || c || "bye"
d => "hi"
AND는 첫번째 falsy를 반환한다
1 && 0 => 0
1 && 2 && null && 3 => null
1 && 2 && 3 => 3
NOT을 두개 연달아 사용하면 불린형으로 사용할 수 있다.
!![].length => false
최근에 추가된 문법이다.
a ?? b
=> a가 null 도 아니고 undefined 도 아니라면 a
=> 그 이외에는 b
|| 와 비슷해 보인다. 결과도 사실 똑같지만 아래의 차이가 있다.