타입 다루기
원시값과 참조값에 맞춰 타입 검사하기
-
typeof : 타입검사해서 문자열로 반환함
typeof null; // object typeof false; // boolean typeof NaN; // number
-
instanceof
function Person(name, age) { this.name = name; this.age = age; } const yeon = new Person("yeon", 20); yeon instanceof Person; // true
-
더 정확한 타입을 검사하고 싶다면
const arr = []; const func = function() {}; const date = new Date(); arr instanceof Object; // true func instanceof Object; // true date instanceof Object; // true Object.prototype.toString.call(date); // '[object Date]'
Number.isNaN() 사용하기
- NaN : 다른 모든 값과 비교했을 때 다르고, 다른 NaN과 비교했을 때도 같지 않다.
- Number.isNaN()의 값이 false면 입력받은 값이 숫자라는 의미!
- Number.isNaN과 isNaN은 다르다
- isNaN은 느슨한 검사를 하고, Number.isNaN은 엄격한 검사를 한다.
isNaN(123 + “테스트”) // true
Number.isNaN(123 + “테스트”) // false
undefined & null
// !뒤에 값을 불리언으로 평가한 뒤 값 뒤집기
!null; // true
// !!는 Boolean()과 동일하다
!!null; // false
// 수학연산에서 0으로 취급
null + 123; // 123
// 값이 달라서 false
null == false; // false
// !가 붙으면 뒤의 값을 불리언으로 평가한 뒤 반대값 반환
!null === true; // true
undefined + 10; // NaN
undefined == null; //true
// undefined의 타입("undefined"), null의 타입("object")
undefined === null; // false
!undefined === !null; // true
falsy값
- false
- null
- undefined
- 0
- -0
- 0n
- NaN
- “”
실천 방법
- 비어있는 값은 항상 null로 정의하기
- undefined, null → 값이 없거나 정의되지 않음
- 연산에서 null은 0에 가깝고 undefined는 NaN을 의미한다.
엄격 동등 연산자(===)를 사용하기
- 동등연산자는 의도하지 않은 암묵적인 형 변환까지 일으킨다.
암묵적인 형변환은 No! 명시적으로 하기
- 자바스크립트 엔진 평가 -> 암묵적인 형변환
- 사용자 → 명시적인 형변환
// 암묵적인 형변환
11 + " 문자와 결합"; // '11 문자와 결합'
!!"문자열"; // true
!!""; // false
// 명시적인 형변환
String(11 + " 문자와 결합");
Boolean("문자열"); // true
Boolean(""); // false
parseInt("9.9999", 10); // 9
- parseInt()는 꼭 특정 진수 넣어주기