Để tìm xem một đối tượng được xây dựng bởi một hàm tạo nhất định hay một đối tượng kế thừa từ nó, bạn có thể sử dụng lệnh instanceof :
//Chúng tôi muốn hàm này lấy tổng các số được chuyển vào nó
//Nó có thể được gọi là tổng (1, 2, 3) hoặc tổng ([1, 2, 3]) và phải cho 6
function sum(...arguments) {
if (arguments.length === 1) {
const [firstArg] =arguments
if (firstArg instanceof Array) { //firstArg là một cái gì đó giống như [1, 2, 3]
return sum(...firstArg) //gọi tổng (1, 2, 3)
}
}
return arguments.reduce((a,b) =>a +b)
}
console.log(sum(1, 2, 3)) //6
console.log(sum([1, 2, 3])) //6
console.log(sum(4)) //4
Lưu ý rằng các giá trị nguyên thủy không được coi là phiên bản của bất kỳ lớp nào:
console.log(2 instanceof Number) //false
console.log('abc' instanceof String) //false
console.log(true instanceof Boolean) //false
console.log(Symbol() instanceofSymbol) //false
Mọi giá trị trong JavaScript ngoài null và undefined còn có một thuộc tính hàm tạo lưu trữ hàm được sử dụng để xây dựng nó. Điều này thậm chí hoạt động với các nguyên thủy.
//Trong khi instanceof cũng bắt các trường hợp của các lớp con,
//sử dụng obj.constructor thì không
console.log ([] instanceof Object, [] instanceof Array) //true true
console.log ([].constructor === Object, [].constructor === Array) //false true
function isNumber(value) {
//null.constructor và undefined.constructor gặp lỗi khi được truy cập
if (value === null || value === undefined) return false
return value.constructor === Number
}
console.log(isNumber(null), isNumber(undefined)) //false false
console.log(isNumber('abc'), isNumber([]), isNumber(() => 1)) //false false false
console.log(isNumber(0), isNumber(Number('10.1')), isNumber(NaN)) //true true true
Tham khảo GoalKicker.com
Dịch: Devmaster Academy