javascript檢驗資料型別的方法
阿新 • • 發佈:2021-08-04
typeof
typeof返回資料型別:number、string、boolean、symbel、undefined、function、object。引用資料中的陣列、日期、正則都會被返回object。並且對於簡單資料型別的null也會返回object。
const num = 10 const str = 'string' const bol = true const Undefined = undefined const fn = () => { } const obj = new Object() const date = new Date() const arr = [] const brr = /^[a-z]^/ const Null = null console.log(typeof num); console.log(typeof str); console.log(typeof bol); console.log(typeof Undefined); console.log(typeof fn); console.log(typeof obj); console.log(typeof date); console.log(typeof arr); console.log(typeof brr); console.log(typeof Null);
constructor
constructor是原型prototype中的一個屬性,當函式被定義時,js會為函式新增原型prototype,並且這個prototype中construor屬性指向函式引用。但是constructor無法識別null和undefined,如果呼叫的話會報錯。
console.log(num.constructor); console.log(str.constructor); console.log(bol.constructor); console.log(fn.constructor); console.log(obj.constructor); console.log(date.constructor); console.log(arr.constructor); console.log(brr.constructor); console.log(Null.constructor); console.log(Undefined.constructor);
Object.prototype.toString.call()
可以返回所有的資料型別(博主暫時瞭解的),toString是Object的原型方法,其他型別作為Object的例項都重寫了toString方法,所以需要用call去呼叫Object上原型toString方法
console.log(Object.prototype.toString.call(num)); console.log(Object.prototype.toString.call(str)); console.log(Object.prototype.toString.call(bol)); console.log(Object.prototype.toString.call(fn)); console.log(Object.prototype.toString.call(obj)); console.log(Object.prototype.toString.call(date)); console.log(Object.prototype.toString.call(arr)); console.log(Object.prototype.toString.call(brr)); console.log(Object.prototype.toString.call(Null)); console.log(Object.prototype.toString.call(Undefined));
instanceof
instanceof檢測的是原型,A instanceof B檢測的是B.prototype是否出現在A的原型鏈上,所以instanceof只能判斷兩個物件是否屬於例項關係,而不能判斷一個物件例項具體屬於那種型別
let array = [1, 2, 34, 5];
let obj = {}
console.log(array instanceof Array); //true
console.log(Array instanceof Object); //true
console.log(array instanceof Object); //true
console.log(obj instanceof Array); //false