前言
類型判斷是我們在日常工作中經常會遇到的一個功能,本文將給大家詳細介紹關于javascript類型判斷的相關內容,下面話不多說了,來一起看看詳細的介紹吧
Javascript中數據類型分為兩種:
接下來我們就來看看怎么做數據類型判別吧?
首先來看看 typeof
| 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”
接著就來說說typeof null == "object"。這個相信前端開發的小伙伴都知道是這個結果了,But why? 這其實是javascript第一個版本就存在的一個bug,歷史原因可以看看這篇文章The history of typeof null
關于如何判斷數組
let arr = [1, 2, 3];typeof arr"object"
上面這個結果大家應該不陌生,那該如何正確判斷數組類型呢
1、instanceof
arr instanceof Array //true
2、isArray
Array.isArray(arr) // true
3、constructor.name
arr.constructor.name // "Array"
第三種用法用的人應該比較少,不少前端的的小伙伴都沒用過。對于復雜類型Object,它的每個實例都有constructor屬性。
instanceof vs isArray
當檢測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 ArrayArray.isArray(arr); // true// Considered harmful, because doesn't work though iframesarr instanceof Array; // false這段代碼是從MDN copy的。補充以下結果,發現第三種方法constructor.name也能正確判斷出。
arr.constructor.name //"Array"
關于NaN
使用isNaN判斷NaN。
isNaN(1/'a') // true
我們知道NaN == NaN結果是false,那如何判斷兩個NaN變量呢?
比較兩個NaN變量,使用es6的Object.is()即可。
let nan1 = NaNlet nan2 = NaNObject.is(nan1, nan2)true
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。
新聞熱點
疑難解答