① Number(2)
② Number(2).valueOf()
③ Number(2).toString()
④ 2.valueOf()
⑤ 2 .toString()
==
와 ===
는 어떻게 다르고 어떻게 동작하는가?
① 2 == 2, true
② 2 == 2, true
③ 2 == '2', true
④ SyntaxError 발생
⑤ 2 == '2', true
사용자가 1.123
을 입력할 경우, 인터프리터는 아래와 같이 생각한다.
위와 같은 모호함으로 인해 인터프리터는 1.
뒤에는 반드시 숫자가 나와야 된다고 생각을 한다. ④은 문자가 나왔으므로 SyntaxError가 발생하였다.
1.toString()의 경우
1.뒤에 문자가 나왔으므로 동작을 하지 못하고 SyntaxError가 발생하게 된다.
1.23.toString()의 경우
숫자의 소수부가 나오고 그 뒤에 또 소수부가 나오는 숫자는 존재하기 않기 때문에 인터프리터가 .을 찍는 순간, 1.23을 객체로 만들어버리고 toString()
을 실행할 수 있게 해주기 때문에 정상 작동한다.
1. toString()의 경우
띄어쓰기로 뒤에 소수부가 없다는 것을 확인 시켜주기 때문에 toString()
이 정상 작동한다.
===
의 동작 원리console.log(1 === 1) // 숫자형, 값1 === 숫자형, 값1 → true
console.log(1 === '1') // 숫자형, 값1 === 문자열, 값1 → false
console.log([1,2] === [1,2]) // 레퍼런스가 다르다. → false
var a = {a : 1} // a라는 변수에 객체를 생성
var b = a // b라는 변수에 a를 대입
b.a = 2; // b의 a의 값을 2로 변경
console.log(a.a) // a의 a값도 같이 변경 → 2
console.log(b.a === a.a) // true
위와 같이 a와 b는 같은 레퍼런스를 가지고 있기 때문에 참이 되며 a나 b를 수정해도 서로가 같이 수정이 된다.
==
의 동작 원리두 값이 일치해야 한다.
console.log(undefined == null) // true
console.log(0 == '0') // 0 == 0, true
console.log(true == '1') // 1 == 1, true
참조 타입과 원시 타입을 비교하는 경우
console.log([2,3] == '2,3') // '2,3' == '2,3', true
0 == 'a'
console.log(0 == 'a') //0 == NaN, false
'a'를 숫자로 바꾸어 NaN이 나오고 결과는 false가 된다.
NaN == NaN
console.log(NaN == NaN) // false
NaN과 NaN은 같지 않다.
참조 타입과 참조 타입을 비교하는 경우, ==
는 ===
와 동일한 결과가 나오기 때문에 사용하는 의미가 없다.
===
는 일치를 포함한다. (===
하면 당연히 ==
다.)
해당 포스팅은 썬한 코딩, 입사에 필요한 JS기술의 내용을 보며 공부한 것을 정리한 내용입니다.