字符串、數字、布爾值、Null、Undefined、對象、數組、函數、判斷方法
JavaScript 中有兩種數據類型,分別是基本數據類型和引用數據類型:javascript
基本數據類型 | 引用數據類型 |
---|---|
Number、String、Boolean、Null、Undefined、Symbol | Object、Array、Function |
在開發過程當中咱們有時候會須要對變量進行類型判斷,通常是利用 typeof
並搭配相應的特性
來完成。java
判斷一個變量是否是 Number
能夠利用 typeof
判斷是否是 number
可是有個小坑就是 typeof NaN === number
,能夠利用 NaN !== NaN
的特性來加以判斷。git
const isNumber = val => typeof val === 'number' && val === val;
判斷 String
就很簡單了沒有那麼多彎彎繞繞一個 typeof
搞定。github
const isString = val => typeof val === 'string';
Boolean
的判斷也很簡單使用 typeof
,固然也可使用 ===
來進行判斷。編程
const isBoolean = val => typeof val === 'boolean';
爲何要把這兩個數據類型放在一塊兒講呢?
在其餘編程語言中每每只有 Null
、Undefined
、Nil
中的其中一個,而 JavaScript 卻把它們兩個都單獨進行了定義:數組
名稱 | 定義 |
---|---|
null | 是一個對象,表示無值 |
undefined | 是一個特殊屬性,其值是未定義,表示缺乏值 |
因爲在 JavaScript 中都有本身定義對應的值直接利用值來判斷就能夠了:瀏覽器
const isNull = val => val === null; const isUndefined = val => val === undefined; const isNil = val => val === undefined || val === null;
Symbol
是 ES6 新引入的數據類型用於表示表示獨一無二的值,因爲是新引入並無特別大的坑直接利用 typeof
梭它就對了。微信
const isSymbol = val => typeof val === 'symbol';
Null 也是對象須要進行判斷。
Object
能夠是 PlainObject
字面量對象 也能夠是由 new
操做符生成的對象:編程語言
在 JavaScript 中能夠利用函數來實現類的功能:函數
function Person (name) { this.name = name; } var person = new Person('xiaoer')
對於這樣的類對象 和 字面量對象、類對象類型 咱們均可以使用下面方法進行判斷,Object.constructor
當遇到 Null 和 Undefined 會返回一個空對象,不然則會返回給予的對象。
const isObject = obj => obj === Object(obj);
而字面量對象則指的是經過 Object.constructor
方法建立的對象,固然 const a = {a: 1}
這樣聲明建立的對象其實也是調用了Object.constructor
方法,利用 constructor
和 typeof
則能夠進行判斷。這裏巧妙的利用 !!
來進行布爾值的轉換來判斷是否爲 Null 和 Undefined:
const isPlainObject = val => !!val && typeof val === 'object' && val.constructor === Object;
Array
算是一個特殊的 Object
不信你用上面的對象方法判斷看看就知道了。
那咱們這麼判斷
Array
呢?
ES6
提供了一個判斷數組的方法 Array.isArray
,可是若是你在使用不支持 ES6
的瀏覽器時須要本身實現一下這個方法了:
if (!Array.isArray) { Array.isArray = function(arg) { return Object.prototype.toString.call(arg) === '[object Array]'; }; }
Function
在引用數據類型中算是簡單隻須要使用 typeof
進行判斷:
const isFunction = val => typeof val === 'function';
在平常開發中 JSON
實在是太常常使用拉,在這裏咱們也把它當作一種「類型」給出它的判斷方法:
const isValidJSON = str => { try { const o = JSON.parse(str) return o != null && typeof o === "object" } catch (e) { return false; } };
內容太多讓你沒法呼吸了?
沒事小二這裏還有殺手鐗能夠提供你們使用:
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 秒 ⏱ 終極等號 中有同窗提問了爲何沒有對 NaN
進行判斷,在平常開發中出現 NaN
是一件很差的事情,因此小二就沒有把它加到判斷中去了,若是有須要能夠利用 isNaN()
這個方法來進行判斷。
在困惑的城市裏總少不了並肩同行的
夥伴
讓咱們一塊兒成長。
點贊
。小星星
。m353839115
。
本文原稿來自 PushMeTop