一帜平、typeof
console.log(typeof 123);? ? // number
console.log(typeof '123');? ? // string
console.log(typeof true);? ? // boolean
console.log(typeof null);? ? // object
console.log(typeof undefinde);? ? // undefined
console.log(typeof []);? ? // object
console.log(typeof {});? ? // object
console.log(typeof function fn(){});? ? // function
通過(guò)上面的監(jiān)測(cè)虑凛,我們可以看出 typeof 檢測(cè) Array 以及 Object 返回的類型都是 object,因此用 typeof 是無(wú)法檢測(cè)出數(shù)組和對(duì)象的
二梗肝、instanceof
var obj = {}, arr = [];
console.log(arr instanceof Array);? ? // true
console.log(obj instanceof Object);? ? // true
注意:instanceof 只可以用來(lái)判斷數(shù)組和對(duì)象;
由于數(shù)組也屬于對(duì)象因此我們使用 instanceof 判斷一個(gè)數(shù)組是否為對(duì)象結(jié)果也會(huì)是 true
console.log(arr instanceof Object);? ? // true
可以封裝一個(gè)方法改進(jìn):
function getDAtaType(e){
? ? if(e instanceof Array) {
? ? ? ? return 'Array'
????} else if(e instanceof Object) {
? ? ? ? return 'Object'
????} else {
? ? ? ? return 'data? is no object type'
????}
}
三铺董、constructor
var obj = {}, arr = [], n = null, u = undefined, f = function fn(){}, num = 123, str = '123', b = true;
console.log(obj.constructor === Object)? ? // true
console.log(arr.constructor === Array)? ? // true
console.log(n.constructor)? ? //?Cannot read property 'constructor' of null
console.log(u.constructor)? ? //?Cannot read property 'constructor' of null
console.log(f.constructor === Function)? ? //?true
console.log(num.constructor === Number)? ? //?true
console.log(str.constructor === String)? ? // true
console.log(b.constructor === Boolean)? ? //?true
四巫击、Object.prototype.toString.call()-最佳方案
var obj = {}, arr = [], n = null, u = undefined, f = function fn(){}, num = 123, str = '123', b = true;
console.log(Object.prototype.toString.call(obj));? ? // [object Object]
console.log(Object.prototype.toString.call(arr));? ? // [object Array]
console.log(Object.prototype.toString.call(n));? ? // [object Null]
console.log(Object.prototype.toString.call(u));? ? // [object Undefined]
console.log(Object.prototype.toString.call(f));? ? // [object Function]
console.log(Object.prototype.toString.call(num));? ? // [object Number]
console.log(Object.prototype.toString.call(str));? ? // [object String]
console.log(Object.prototype.toString.call(b));? ? // [object Boolean]
想了解js基本數(shù)據(jù)類型的童鞋看這里:http://www.reibang.com/p/9d0a14d19fab