一娜庇、typeof
使用typeof檢測數(shù)據(jù)類型塔次,返回值是一個字符串;
檢測基本數(shù)據(jù)類型名秀,準(zhǔn)確率高励负;但是對于引用數(shù)據(jù)類型,準(zhǔn)確率低
1匕得、字符串-----------'string'
2继榆、數(shù)值/NaN-------'number'
3、布爾值-----------'boolean'
4汁掠、null/object ------'object'
這是由于歷史原因造成的略吨。1995年的 JavaScript 語言第一版,只設(shè)計了五種數(shù)據(jù)類型(對象考阱、整數(shù)翠忠、浮點數(shù)、字符串和布爾值)乞榨,沒考慮null秽之,只把它當(dāng)作object的一種特殊值当娱。后來null獨立出來,作為一種單獨的數(shù)據(jù)類型考榨,為了兼容以前的代碼跨细,typeof null返回object就沒法改變了。
typeof window; //'object'
typeof {}; // 'object'
typeof []; //'object'
5河质、函數(shù) -------------'function'
6扼鞋、未定義的變量--'undefined'
二、instanceof
檢測 a 是否是 b 的實例 a instanceof b
instanceof后跟的是構(gòu)造函數(shù)名稱
返回的是一個布爾值
注意:所有的對象(function愤诱,array,object捐友,基本包裝類型)都是Object的實例
console.log(arr instanceof Array); //true
console.log(arr instanceof Object); //true
console.log(obj instanceof Object); //true
console.log(obj instanceof Array); //false
var num = new Number("11");
console.log(num instanceof Number); //true
console.log(num instanceof Object); //true
三淫半、Object.prototype.toString
最準(zhǔn)確的檢測方法,可以檢測所有的數(shù)據(jù)類型
Object.prototype.toString.call(檢測的數(shù)據(jù)).slice(8,-1).toLowerCase(); 得到的是小寫的數(shù)據(jù)類型
console.log(Object.prototype.toString.call(123)); //[object Number]
console.log(Object.prototype.toString.call('123')); //[object String]
console.log(Object.prototype.toString.call(undefined)); //[object Undefined]
console.log(Object.prototype.toString.call(true)); //[object Boolean]
console.log(Object.prototype.toString.call({})); //[object Object]
console.log(Object.prototype.toString.call([])); //[object Array]
console.log(Object.prototype.toString.call(function(){})); //[object Function]
console.log(Object.prototype.toString.call(null)); //[[object Null]]