因為以前不是很清楚揭绑,在網(wǎng)上看了一些文章后做了一下總結(jié)乔夯。
1.typeof? 這是最常用的基本數(shù)據(jù)類型檢測的方法
console.log(typeof "");? ? ?// string
console.log(typeof 1);? ? ?// number
console.log(typeof true);? ? ?// boolean
console.log(typeof undefined);? ? ? // undefined
console.log(typeof null);? ? ? // object
console.log(typeof {});? ? // object
console.log(typeof []);? ? ?//? object
console.log(typeof function(){});? ?// function
可以看見当犯,null? ?數(shù)組? ?跟? {}對象? 都是object? ?是無法區(qū)分的
2.instanceof
console.log("1" instanceof String);? ? ?// false
console.log(1 instanceof Number);? ?// false
console.log(true instanceof Boolean);? ??// false
console.log({} instanceof Object);? ? ?//? true
console.log([] instanceof Array);? ? ?//? true
console.log(function(){} instanceof Function);? ? ?//? true
本方法可以檢測復(fù)雜數(shù)據(jù)類型
//? ? ? ? ? ? console.log(null instanceof Null);
//? ? ? ? ? ? console.log(undefined instanceof Undefined);
null 跟??undefined? ?直接輸出會報錯? 但是使用new? 關(guān)鍵字創(chuàng)建就不會
3.constructor
console.log(("1").constructor === String);? ? //? true
console.log((1).constructor === Number);? ???//? true
console.log((true).constructor === Boolean);? ? ? //? true
console.log(({}).constructor === Object);? ? ? ??//? true
console.log(([]).constructor === Array);? ? ? ??//? true
console.log((function() {}).constructor === Function);? ? ??//? true
//? ? console.log((null).constructor === Null);
//? ? console.log((undefined).constructor === Undefined);
看起來是可以解決所有問題了米绕,但是改原型(prototype)就會改變類型
4.Object.prototype.toString.call()? ? ? 終極方法瑟捣,百試不爽
?console.log(Object.prototype.toString.call("1"));? ? //? {object? ? String}
?console.log(Object.prototype.toString.call(1));? ? ??//? {object? ? Number}
console.log(Object.prototype.toString.call(null));? ? ? ? ?//? {object? ? Null}
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? ?Fuction}
就算是更改原型一樣可以輸出 原來的數(shù)據(jù)類型
5.$.type() 或者? jQuery.type()? ?常用的jQuery方法,實質(zhì)就是第四種方法栅干,使用簡便迈套,但是需要引入jQuery
$.type("1")? ? ??//? {object?String}
$.type(1)? ? ??//? {object?Number}
$.type([])? ??//? {object? ? Array}
$.type(undefined)? ??//? {object?Undefined}
$.type(null)? ???//? {object? ? Null}
就列舉幾個了,輸出同方法四相同