每日 30 秒 ⏱ 數據類型大亂燉

封面

簡介

字符串、數字、布爾值、Null、Undefined、對象、數組、函數、判斷方法

JavaScript 中有兩種數據類型,分別是基本數據類型和引用數據類型:javascript

基本數據類型 引用數據類型
Number、String、Boolean、Null、Undefined、Symbol Object、Array、Function

在開發過程當中咱們有時候會須要對變量進行類型判斷,通常是利用 typeof 並搭配相應的特性 來完成。java

Number

判斷一個變量是否是 Number 能夠利用 typeof 判斷是否是 number 可是有個小坑就是 typeof NaN === number,能夠利用 NaN !== NaN 的特性來加以判斷。git

const isNumber = val => typeof val === 'number' && val === val;

String

判斷 String 就很簡單了沒有那麼多彎彎繞繞一個 typeof 搞定。github

const isString = val => typeof val === 'string';

Boolean

Boolean 的判斷也很簡單使用 typeof,固然也可使用 === 來進行判斷。編程

const isBoolean = val => typeof val === 'boolean';

Null 和 Undefined

爲何要把這兩個數據類型放在一塊兒講呢?

在其餘編程語言中每每只有 NullUndefinedNil中的其中一個,而 JavaScript 卻把它們兩個都單獨進行了定義:數組

名稱 定義
null 是一個對象,表示無值
undefined 是一個特殊屬性,其值是未定義,表示缺乏值

因爲在 JavaScript 中都有本身定義對應的值直接利用值來判斷就能夠了:瀏覽器

const isNull = val => val === null;
const isUndefined = val => val === undefined;
const isNil = val => val === undefined || val === null;

Symbol

Symbol 是 ES6 新引入的數據類型用於表示表示獨一無二的值,因爲是新引入並無特別大的坑直接利用 typeof 梭它就對了。微信

const isSymbol = val => typeof val === 'symbol';

Object

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 方法,利用 constructortypeof 則能夠進行判斷。這裏巧妙的利用 !! 來進行布爾值的轉換來判斷是否爲 Null 和 Undefined:

const isPlainObject = val => !!val && typeof val === 'object' && val.constructor === Object;

Array

Array 算是一個特殊的 Object 不信你用上面的對象方法判斷看看就知道了。

那咱們這麼判斷 Array 呢?

ES6 提供了一個判斷數組的方法 Array.isArray,可是若是你在使用不支持 ES6 的瀏覽器時須要本身實現一下這個方法了:

if (!Array.isArray) {
  Array.isArray = function(arg) {
    return Object.prototype.toString.call(arg) === '[object Array]';
  };
}

Function

Function 在引用數據類型中算是簡單隻須要使用 typeof 進行判斷:

const isFunction = val => typeof val === 'function';

JSON

在平常開發中 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() 這個方法來進行判斷。

一塊兒成長

在困惑的城市裏總少不了並肩同行的 夥伴 讓咱們一塊兒成長。
  • 若是您想讓更多人看到文章能夠點個 點贊
  • 若是您想激勵小二能夠到 Github 給個 小星星
  • 若是您想與小二更多交流添加微信 m353839115

微信公衆號

本文原稿來自 PushMeTop
相關文章
相關標籤/搜索