배열을 구분해내는 메소드 Array.isArray 를 사용한다. 괄호 안에 들어간 변수가 배열인지 판별해서 boolean 값을 반환해 준다. (배열과 객체는 typeof 연산자로 판별할 수 없다.)
const colors = ["pink", "orange", "apricot"];
const warmColor = { name: "pink" };
typeof colors // "object"
typeof warmColor // "object"
Array.isArray(colors) // "true"
Array.isArray(warmColor) // "false"
어떤 값이 객체인지 알고싶다면, Object.prototype.constructor 속성을 이용한다. 확인하고 싶은 값의 .constructor 가 Object 인지 boolean 값으로 확인해보면 된다.
let obj = {}
obj.constructor === Object // "true"
let obj = new Object
obj.constructor === Object // "true"
// 논리연산자로 엮어서 아래와 같이 검사해볼 수 있다.
if(typeof obj === "object" && obj.constructor === Object)
let arr = []
arr.constructor === Array // "true"
let arr = new Array
arr.constructor === Array // "true"
let isTrue = true
isTrue.constructor === Boolean // "true"
let num = 3
num.constructor === Number // "true"
NaN 이 헷갈릴 수 있는 이유는, boolean 명제로 NaN끼리 비교했을 때 거짓이라고 하기때문이다. 이 때는 isNaN 함수 또는 Number.isNaN 메소드를 사용할 수 있다. Number.isNaN 이 조금 더 빡빡한 검사다.
// NaN을 검사하는 별도의 함수나 메소드가 필요한 이유: NaN은 boolean으로 검사할 수 없다.
NaN === NaN // "false"
// isNaN(), Number.isNaN()
const highFive = "hi5";
isNaN(highFive); // "true"
Number.isNaN(highFive); // "false"
심플하게, boolean 값으로 검사한다.
function isNull(x) {
if(x === null) {
return "I am null!"
}
}
typeof null === "object" // typeof 로는 검사할 수 없다.