javascript中關(guān)于類型判斷的一些疑惑小結(jié)
前言
類型判斷是我們在日常工作中經(jīng)常會遇到的一個功能,本文將給大家詳細(xì)介紹關(guān)于javascript類型判斷的相關(guān)內(nèi)容,下面話不多說了,來一起看看詳細(xì)的介紹吧
Javascript中數(shù)據(jù)類型分為兩種:
- 簡單數(shù)據(jù)類型:Undefined, NULL, Boolean, Number, String
- 復(fù)雜數(shù)據(jù)類型:Object
接下來我們就來看看怎么做數(shù)據(jù)類型判別吧?
首先來看看 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" |
來點(diǎn)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"
接下來我們就來看看那些奇怪的現(xiàn)象吧
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"
使用構(gòu)造函數(shù)創(chuàng)建的變量,使用typeof判斷會返回“object”結(jié)果,但是Function函數(shù)例外,由它創(chuàng)建的變量typeof返回的是“function”
接著就來說說typeof null == "object"。這個相信前端開發(fā)的小伙伴都知道是這個結(jié)果了,But why? 這其實(shí)是javascript第一個版本就存在的一個bug,歷史原因可以看看這篇文章The history of typeof null
關(guān)于如何判斷數(shù)組
let arr = [1, 2, 3]; typeof arr "object"
上面這個結(jié)果大家應(yīng)該不陌生,那該如何正確判斷數(shù)組類型呢
1、instanceof
arr instanceof Array //true
2、isArray
Array.isArray(arr) // true
3、constructor.name
arr.constructor.name // "Array"
第三種用法用的人應(yīng)該比較少,不少前端的的小伙伴都沒用過。對于復(fù)雜類型Object,它的每個實(shí)例都有constructor屬性。
instanceof vs isArray
當(dāng)檢測Array實(shí)例時, Array.isArray 優(yōu)于 instanceof,因?yàn)锳rray.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的。補(bǔ)充以下結(jié)果,發(fā)現(xiàn)第三種方法constructor.name也能正確判斷出。
arr.constructor.name //"Array"
關(guān)于NaN
使用isNaN判斷NaN。
isNaN(1/'a') // true
我們知道NaN == NaN結(jié)果是false,那如何判斷兩個NaN變量呢?
比較兩個NaN變量,使用es6的Object.is()即可。
let nan1 = NaN let nan2 = NaN Object.is(nan1, nan2) true
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
ES6?關(guān)鍵字?let?和?ES5?及關(guān)鍵字?var?的區(qū)別解析
var可以穿透控制語句、條件語句這樣的作用域,導(dǎo)致變量沖突經(jīng)常發(fā)生,這篇文章主要介紹了ES6?關(guān)鍵字?let?和?ES5?及關(guān)鍵字?var?的區(qū)別,需要的朋友可以參考下2022-09-09JavaScript函數(shù)封裝隨機(jī)顏色驗(yàn)證碼(完整代碼)
這篇文章主要介紹了JavaScript函數(shù)封裝隨機(jī)顏色驗(yàn)證碼(完整代碼),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-12-12JavaScript實(shí)現(xiàn)指定數(shù)量的并發(fā)限制的示例代碼
這篇文章主要介紹了JavaScript實(shí)現(xiàn)指定數(shù)量的并發(fā)限制的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03js實(shí)現(xiàn)內(nèi)容顯示并使用json傳輸數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)內(nèi)容顯示并使用json傳輸數(shù)據(jù)的方法,感興趣的小伙伴們可以參考一下2016-03-03