簡介
字符串、數(shù)字、布爾值、Null、Undefined、對象、數(shù)組、函數(shù)、判斷方法
JavaScript 中有兩種數(shù)據(jù)類型,分別是基本數(shù)據(jù)類型和引用數(shù)據(jù)類型:
基本數(shù)據(jù)類型 | 引用數(shù)據(jù)類型 |
---|---|
Number、String、Boolean、Null、Undefined、Symbol | Object、Array、Function |
在開發(fā)過程中我們有時候會需要對變量進行類型判斷,一般是利用 typeof 并搭配相應(yīng)的特性 來完成。
Number判斷一個變量是不是 Number 可以利用 typeof 判斷是不是 number 但是有個小坑就是 typeof NaN === number,可以利用 NaN !== NaN 的特性來加以判斷。
const isNumber = val => typeof val === "number" && val === val;String
判斷 String 就很簡單了沒有那么多彎彎繞繞一個 typeof 搞定。
const isString = val => typeof val === "string";Boolean
Boolean 的判斷也很簡單使用 typeof,當(dāng)然也可以使用 === 來進行判斷。
const isBoolean = val => typeof val === "boolean";Null 和 Undefined
為什么要把這兩個數(shù)據(jù)類型放在一起講呢?
在其他編程語言中往往只有 Null、Undefined、Nil中的其中一個,而 JavaScript 卻把它們兩個都多帶帶進行了定義:
名稱 | 定義 |
---|---|
null | 是一個對象,表示無值 |
undefined | 是一個特殊屬性,其值是未定義,表示缺少值 |
由于在 JavaScript 中都有自己定義對應(yīng)的值直接利用值來判斷就可以了:
const isNull = val => val === null; const isUndefined = val => val === undefined; const isNil = val => val === undefined || val === null;Symbol
Symbol 是 ES6 新引入的數(shù)據(jù)類型用于表示表示獨一無二的值,由于是新引入并沒有特別大的坑直接利用 typeof 梭它就對了。
const isSymbol = val => typeof val === "symbol";Object
Null 也是對象需要進行判斷。
Object 可以是 PlainObject 字面量對象 也可以是由 new 操作符生成的對象:
在 JavaScript 中可以利用函數(shù)來實現(xiàn)類的功能:
function Person (name) { this.name = name; } var person = new Person("xiaoer")
對于這樣的類對象 和 字面量對象、類對象類型 我們都可以使用下面方法進行判斷,Object.constructor 當(dāng)遇到 Null 和 Undefined 會返回一個空對象,否則則會返回給予的對象。
const isObject = obj => obj === Object(obj);
而字面量對象則指的是通過 Object.constructor 方法創(chuàng)建的對象,當(dāng)然 const a = {a: 1} 這樣聲明創(chuàng)建的對象其實也是調(diào)用了Object.constructor 方法,利用 constructor 和 typeof 則可以進行判斷。這里巧妙的利用 !! 來進行布爾值的轉(zhuǎn)換來判斷是否為 Null 和 Undefined:
const isPlainObject = val => !!val && typeof val === "object" && val.constructor === Object;Array
Array 算是一個特殊的 Object 不信你用上面的對象方法判斷看看就知道了。
那我們這么判斷 Array 呢?
ES6 提供了一個判斷數(shù)組的方法 Array.isArray,但是如果你在使用不支持 ES6 的瀏覽器時需要自己實現(xiàn)一下這個方法了:
if (!Array.isArray) { Array.isArray = function(arg) { return Object.prototype.toString.call(arg) === "[object Array]"; }; }Function
Function 在引用數(shù)據(jù)類型中算是簡單只需要使用 typeof 進行判斷:
const isFunction = val => typeof val === "function";JSON
在日常開發(fā)中 JSON 實在是太經(jīng)常使用拉,在這里我們也把它當(dāng)做一種“類型”給出它的判斷方法:
const isValidJSON = str => { try { const o = JSON.parse(str) return o != null && typeof o === "object" } catch (e) { return false; } };終極奧義
內(nèi)容太多讓你無法呼吸了?
沒事小二這里還有殺手锏可以提供大家使用:
function getType(obj) { if(obj && obj.constructor && obj.constructor.name) { return obj.constructor.name; } return Object.prototype.toString.call(obj).replace(/^[object (.+)]$/,"$1").toLowerCase(); }
需要注意的是 NaN 在這里依舊返回的是 "number",在 每日 30 秒 ? 終極等號 中有同學(xué)提問了為什么沒有對 NaN 進行判斷,在日常開發(fā)中出現(xiàn) NaN 是一件不好的事情,所以小二就沒有把它加到判斷中去了,如果有需要可以利用 isNaN() 這個方法來進行判斷。
一起成長在困惑的城市里總少不了并肩同行的 伙伴 讓我們一起成長。
如果您想讓更多人看到文章可以點個 點贊。
如果您想激勵小二可以到 Github 給個 小星星。
如果您想與小二更多交流添加微信 m353839115。
本文原稿來自 PushMeTop
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/102717.html
摘要:歡迎來我的個人站點性能優(yōu)化其他優(yōu)化瀏覽器關(guān)鍵渲染路徑開啟性能優(yōu)化之旅高性能滾動及頁面渲染優(yōu)化理論寫法對壓縮率的影響唯快不破應(yīng)用的個優(yōu)化步驟進階鵝廠大神用直出實現(xiàn)網(wǎng)頁瞬開緩存網(wǎng)頁性能管理詳解寫給后端程序員的緩存原理介紹年底補課緩存機制優(yōu)化動 歡迎來我的個人站點 性能優(yōu)化 其他 優(yōu)化瀏覽器關(guān)鍵渲染路徑 - 開啟性能優(yōu)化之旅 高性能滾動 scroll 及頁面渲染優(yōu)化 理論 | HTML寫法...
摘要:歡迎來我的個人站點性能優(yōu)化其他優(yōu)化瀏覽器關(guān)鍵渲染路徑開啟性能優(yōu)化之旅高性能滾動及頁面渲染優(yōu)化理論寫法對壓縮率的影響唯快不破應(yīng)用的個優(yōu)化步驟進階鵝廠大神用直出實現(xiàn)網(wǎng)頁瞬開緩存網(wǎng)頁性能管理詳解寫給后端程序員的緩存原理介紹年底補課緩存機制優(yōu)化動 歡迎來我的個人站點 性能優(yōu)化 其他 優(yōu)化瀏覽器關(guān)鍵渲染路徑 - 開啟性能優(yōu)化之旅 高性能滾動 scroll 及頁面渲染優(yōu)化 理論 | HTML寫法...
摘要:歡迎來我的個人站點性能優(yōu)化其他優(yōu)化瀏覽器關(guān)鍵渲染路徑開啟性能優(yōu)化之旅高性能滾動及頁面渲染優(yōu)化理論寫法對壓縮率的影響唯快不破應(yīng)用的個優(yōu)化步驟進階鵝廠大神用直出實現(xiàn)網(wǎng)頁瞬開緩存網(wǎng)頁性能管理詳解寫給后端程序員的緩存原理介紹年底補課緩存機制優(yōu)化動 歡迎來我的個人站點 性能優(yōu)化 其他 優(yōu)化瀏覽器關(guān)鍵渲染路徑 - 開啟性能優(yōu)化之旅 高性能滾動 scroll 及頁面渲染優(yōu)化 理論 | HTML寫法...
showImg(https://segmentfault.com/img/remote/1460000018771004?w=900&h=500); 簡介 數(shù)組、CSV、表格、工具 將一個數(shù)組轉(zhuǎn)化為逗號為分割符的字符串(CSV)即表格數(shù)據(jù)。 // 該源碼來自于 https://30secondsofcode.org const arrayToCSV = (arr, delimiter = ,) =...
showImg(https://raw.githubusercontent.com/pushmetop/resource/master/30-seconds-for-everyday/simple-http/poster.png); 簡介 XMLHttpRequest、HTTP 工具原理、XHR jQuery.ajax、axios 和 新的 Web API fetch 在瀏覽器不支持的兼容代碼都是...
閱讀 2686·2023-04-25 15:15
閱讀 1327·2021-11-25 09:43
閱讀 1614·2021-11-23 09:51
閱讀 1089·2021-11-12 10:36
閱讀 2891·2021-11-11 16:55
閱讀 966·2021-11-08 13:18
閱讀 736·2021-10-28 09:31
閱讀 2061·2019-08-30 15:47