由於js是一門弱型別語言,變數的型別根據所賦值的型別而變化
例:
let b=1;//b爲number型別
let c='你好';//c爲string型別
let d=true;//d爲Boolean型別
let e=null;//e爲null型別
let f=function(){}//f爲函數型別
判斷數據型別的三種方式
1)typeof:
可以看出typeof判斷null時會判斷成object,,所以這可以說是js的一個小‘bug’,所以判斷一個變數是否爲null時不能用typeof這種方式,,,除此之外,typeof還會把Array型別判斷爲object,,記住這兩種特殊情況!!
2)instanceof:專門判斷參照數據型別
用法:a instanceof b(a是否爲b型別)
let a=[2];
let b={
name:'curry'
}
let c=function(){
console.log(11);
}
console.log(a instanceof Array);//true
console.log(b instanceof Object);//true
console.log(c instanceof Function);//true
console.log(a instanceof Object);//true
console.log(c instanceof Object);//true
由於陣列和函數都屬於物件的一種,所以判斷Object是都爲true
3)使用Object.prototype.toString.call()
Object.prototype.toString.call('') ; // [object String]
Object.prototype.toString.call(1) ; // [object Number]
Object.prototype.toString.call(true) ; // [object Boolean]
Object.prototype.toString.call(Symbol()); //[object Symbol]
Object.prototype.toString.call(undefined) ; // [object Undefined]
Object.prototype.toString.call(null) ; // [object Null]
Object.prototype.toString.call(new Function()) ; // [object Function]
Object.prototype.toString.call(new Date()) ; // [object Date]
Object.prototype.toString.call([]) ; // [object Array]
Object.prototype.toString.call(new RegExp()) ; // [object RegExp]
Object.prototype.toString.call(new Error()) ; // [object Error]
Object.prototype.toString.call(document) ; // [object HTMLDocument]
Object.prototype.toString.call(window) ; //[object global] window 是全域性物件 global 的參照
4)只判斷是否爲陣列型別時還可以用Array.isArray()
這種方法只判斷是否爲陣列,是返回true,否則返回false
let a=[2];
let b={
name:'curry'
}
let c=function(){
console.log(11);
}
console.log(Array.isArray(a));//true
console.log(Array.isArray(b));//false
console.log(Array.isArray(c));//false