Javascript中數據類型分爲兩種:javascript
接下來咱們就來看看怎麼作數據類型判別吧?html
Type | Result |
---|---|
Undefined | "undefined" |
Null | "object" (see below) |
Boolean | "boolean" |
Number | "number" |
String | "string" |
Symbol (new in ECMAScript 2015) | "symbol" |
Host object (provided by the JS environment) | Implementation-dependent |
Function object (implements [[Call]] in ECMA-262 terms) | "function" |
Any other object | "object" |
來點code demo吧前端
let a = undefined; typeof a "undefined" let b = false; typeof b "boolean" let c = 12; typeof c "number" let d = '12'; typeof d "string" let f = function () {}; typeof f "function"
let str = new String('abc'); typeof str "object" let num = new Number(12); typeof num "object" var func = new Function(); typeof func; "function" typeof null "object"
使用構造函數建立的變量,使用typeof判斷會返回「object」結果,可是Function函數例外,由它建立的變量typeof返回的是「function」java
接着就來講說typeof null == "object"。這個相信前端開發的小夥伴都知道是這個結果了,But why? 這實際上是javascript第一個版本就存在的一個bug,歷史緣由能夠看看這篇文章The history of typeof nulles6
let arr = [1, 2, 3]; typeof arr "object"
上面這個結果你們應該不陌生,那該如何正確判斷數組類型呢數組
instanceofapp
arr instanceof Array //true
isArrayide
Array.isArray(arr) // true
constructor.name函數
arr.constructor.name // "Array"
第三種用法用的人應該比較少,很多前端的的小夥伴都沒用過。對於複雜類型Object,它的每一個實例都有constructor屬性。code
當檢測Array實例時, Array.isArray 優於 instanceof,由於Array.isArray能檢測iframes.
var iframe = document.createElement('iframe'); document.body.appendChild(iframe); xArray = window.frames[window.frames.length-1].Array; var arr = new xArray(1,2,3); // [1,2,3] // Correctly checking for Array Array.isArray(arr); // true // Considered harmful, because doesn't work though iframes arr instanceof Array; // false
這段代碼是從MDN copy的。補充如下結果,發現第三種方法constructor.name也能正確判斷出。
arr.constructor.name //"Array"
使用isNaN判斷NaN。
isNaN(1/'a') // true
咱們知道NaN == NaN結果是false,那如何判斷兩個NaN變量呢?
比較兩個NaN變量,使用es6的Object.is()便可。
let nan1 = NaN let nan2 = NaN Object.is(nan1, nan2) true