JS數據類型判斷

前言

本文是對typeofinstanceof兩個操做符的總結。javascript

數據類型

在講這兩個操做符以前,須要把相關的概念先行說明。java

ES6前有5種簡單數據類型,分別是Undefined, Null, Boolean, Number, String; 還有一種複雜數據類型Object 而ES6又增長了一種Symbol數組

typeof檢測

舉例說明

const [a1, b1, c1, d1, e1, f1, g1] = [undefined, null, false, NaN, "abc", {}, Symbol()];
console.log(typeof a1); // undefined
console.log(typeof b1); // object
console.log(typeof c1); // boolean
console.log(typeof d1); // number
console.log(typeof e1); // string
console.log(typeof f1); // object
console.log(typeof g1); // symbol

const h1 = function () {};
console.log(typeof h1); // function

const [i1, j1, l1, m1, n1] = [new Date(), /\s/, Math.sign, Math.PI, []];
console.log(typeof i1); // object
console.log(typeof j1); // object
console.log(typeof l1); // function
console.log(typeof m1); // number
console.log(typeof n1); // object
複製代碼

由此能夠看出能夠使用typeof檢測判斷出來的是undefined, boolean, number, symbol, function, string, 但須要注意的是boolean, number, string的值都不能經過new出來的,不然檢測出的都是object,而function不受影響,例如:ui

const a2 = new Boolean(false);
const b2 = new Number(25);
const c2 = new String('abc');
console.log(typeof a2); // object
console.log(typeof b2); // object
console.log(typeof c2); // object

const d2 = new Function('a', 'b', 'return a + b');
console.log(typeof d2); // function
複製代碼

instanceof

由於typeof不能檢測出引用的數據類型,例如數組、正則等等使用typeof檢測出的都是objectspa

基本類型的數據使用instanceof始終判斷false,由於基本類型不是對象指針

舉例

const [a3, b3, c3, d3] = [[], {}, new Date(), /\s/];
console.log(a3 instanceof Array); // true
console.log(b3 instanceof Object); // true
console.log(c3 instanceof Date); // true
console.log(d3 instanceof RegExp); // true

const e3 = new Boolean(false);
const f3 = new Number(25);
const g3 = new String('abc');
console.log(e3 instanceof Boolean); // true
console.log(f3 instanceof Number); // true
console.log(g3 instanceof String); // true
複製代碼

兩個意外

值得注意的是有兩個意外code

const h3 = null;
console.log(h3 instanceof Object); // false

const i3 = function() {};
console.log(i3 instanceof Function); // true
console.log(i3 instanceof Object); // true
複製代碼

爲何會這樣呢?對象

從它的語法中咱們能夠看出result = variable instanceof constructor它是經過該操做符尋找它的引用類型,而全部引用類型的值都是Object的實例,這也就解釋了全部的對象使用instanceof的時候結果都爲trueblog

const [a4, b4, c4] = [[], {}, new Date(), /\s/];
console.log(a4 instanceof Object); // true
console.log(b4 instanceof Object); // true
console.log(c4 instanceof Object); // true
複製代碼

null是空對象指針,所以typeof null === 'object',然而null又不是object的引用類型的實例,所以使用instanceof會顯示false教程

參考教程

相關文章
相關標籤/搜索