js中檢測數據類型的四種方法

js中檢測數據類型的四種方法

前言

先說一下JavaScript中的數據類型有哪幾類?
主要分類兩大類型,基本類型和引用類型。數組

clipboard.png

1.typeof

先看一下用法:函數

console.log(typeof "");
console.log(typeof 1);
console.log(typeof true);
console.log(typeof null);
console.log(typeof undefined);
console.log(typeof []);
console.log(typeof function(){});
console.log(typeof {});

輸出結果以下:
string
number
boolean
object
undefined
object
function
objectspa

小結

typeof能夠用於檢測基本類型,但碰到引用類型均返回爲object。prototype

2.instanceof

看一下用法:code

console.log("1" instanceof String);
console.log(1 instanceof Number);
console.log(true instanceof Boolean);
console.log([] instanceof Array);
console.log(function(){} instanceof Function);
console.log({} instanceof Object);

輸出結果以下:
false
false
false
true
true
true對象

小結

不難看出,instanceof能夠用於引用類型的檢測,但對於基本類型是不生效的,另外,不能用於檢測null和undefined。blog

3.constructor

先看一下用法:繼承

console.log(("1").constructor === String);
console.log((1).constructor === Number);
console.log((true).constructor === Boolean);
console.log(([]).constructor === Array);
console.log((function() {}).constructor === Function);
console.log(({}).constructor === Object);

輸出結果:
true
true
true
true
true
trueip

撇去null和undefined,彷佛說constructor能用於檢測js的基本類型和引用類型。但當涉及到原型和繼承的時候,便出現了問題,以下:原型

function fun() {};

fun.prototype = new Array();

let f = new fun();

console.log(f.constructor===fun);
console.log(f.constructor===Array);

在這裏,咱們先是定義了一個函數fun,並將該函數的原型指向了數組,同時,聲明瞭一個f爲fun的類型,而後利用constructor進行檢測時,結果以下:
false
true

小結

撇去null和undefined,constructor能用於檢測js的基本類型和引用類型,但當對象的原型更改以後,constructor便失效了。

4.Object.prototype.toString.call()

用法:

var test = Object.prototype.toString;

console.log(test.call("str"));
console.log(test.call(1));
console.log(test.call(true));
console.log(test.call(null));
console.log(test.call(undefined));
console.log(test.call([]));
console.log(test.call(function() {}));
console.log(test.call({}));

結果:
[object String]
[object Number]
[object Boolean]
[object Null]
[object Undefined]
[object Array]
[object Function]
[object Object]

這樣一看,彷佛能知足js的全部數據類型,那咱們看下繼承以後是否能檢測出來

function fun() {};

fun.prototype = new Array();

let f = new fun();

console.log(Object.prototype.toString.call(fun))
console.log(Object.prototype.toString.call(f))

結果:
[object Function]
[object Object]

小結

能夠看出,Object.prototype.toString.call()可用於檢測js全部的數據類型。

相關文章
相關標籤/搜索