成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

每日 30 秒 ? 數(shù)據(jù)類型大亂燉

meteor199 / 2952人閱讀

簡(jiǎn)介
字符串、數(shù)字、布爾值、Null、Undefined、對(duì)象、數(shù)組、函數(shù)、判斷方法

JavaScript 中有兩種數(shù)據(jù)類型,分別是基本數(shù)據(jù)類型和引用數(shù)據(jù)類型:

基本數(shù)據(jù)類型 引用數(shù)據(jù)類型
Number、String、Boolean、Null、Undefined、Symbol Object、Array、Function

在開(kāi)發(fā)過(guò)程中我們有時(shí)候會(huì)需要對(duì)變量進(jìn)行類型判斷,一般是利用 typeof 并搭配相應(yīng)的特性 來(lái)完成。

Number

判斷一個(gè)變量是不是 Number 可以利用 typeof 判斷是不是 number 但是有個(gè)小坑就是 typeof NaN === number,可以利用 NaN !== NaN 的特性來(lái)加以判斷。

const isNumber = val => typeof val === "number" && val === val;
String

判斷 String 就很簡(jiǎn)單了沒(méi)有那么多彎彎繞繞一個(gè) typeof 搞定。

const isString = val => typeof val === "string";
Boolean

Boolean 的判斷也很簡(jiǎn)單使用 typeof,當(dāng)然也可以使用 === 來(lái)進(jìn)行判斷。

const isBoolean = val => typeof val === "boolean";
Null 和 Undefined
為什么要把這兩個(gè)數(shù)據(jù)類型放在一起講呢?

在其他編程語(yǔ)言中往往只有 Null、UndefinedNil中的其中一個(gè),而 JavaScript 卻把它們兩個(gè)都多帶帶進(jìn)行了定義:

名稱 定義
null 是一個(gè)對(duì)象,表示無(wú)值
undefined 是一個(gè)特殊屬性,其值是未定義,表示缺少值

由于在 JavaScript 中都有自己定義對(duì)應(yīng)的值直接利用值來(lái)判斷就可以了:

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

Symbol 是 ES6 新引入的數(shù)據(jù)類型用于表示表示獨(dú)一無(wú)二的值,由于是新引入并沒(méi)有特別大的坑直接利用 typeof 梭它就對(duì)了。

const isSymbol = val => typeof val === "symbol";
Object
Null 也是對(duì)象需要進(jìn)行判斷。

Object 可以是 PlainObject 字面量對(duì)象 也可以是由 new 操作符生成的對(duì)象:

在 JavaScript 中可以利用函數(shù)來(lái)實(shí)現(xiàn)類的功能:

function Person (name) {
    this.name = name;
}

var person = new Person("xiaoer")

對(duì)于這樣的類對(duì)象 和 字面量對(duì)象、類對(duì)象類型 我們都可以使用下面方法進(jìn)行判斷,Object.constructor 當(dāng)遇到 Null 和 Undefined 會(huì)返回一個(gè)空對(duì)象,否則則會(huì)返回給予的對(duì)象。

const isObject = obj => obj === Object(obj);

而字面量對(duì)象則指的是通過(guò) Object.constructor 方法創(chuàng)建的對(duì)象,當(dāng)然 const a = {a: 1} 這樣聲明創(chuàng)建的對(duì)象其實(shí)也是調(diào)用了Object.constructor 方法,利用 constructortypeof 則可以進(jìn)行判斷。這里巧妙的利用 !! 來(lái)進(jìn)行布爾值的轉(zhuǎn)換來(lái)判斷是否為 Null 和 Undefined:

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

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

那我們這么判斷 Array 呢?

ES6 提供了一個(gè)判斷數(shù)組的方法 Array.isArray,但是如果你在使用不支持 ES6 的瀏覽器時(shí)需要自己實(shí)現(xiàn)一下這個(gè)方法了:

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

Function 在引用數(shù)據(jù)類型中算是簡(jiǎn)單只需要使用 typeof 進(jìn)行判斷:

const isFunction = val => typeof val === "function";
JSON

在日常開(kāi)發(fā)中 JSON 實(shí)在是太經(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)容太多讓你無(wú)法呼吸了?

沒(mé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 秒 ? 終極等號(hào) 中有同學(xué)提問(wèn)了為什么沒(méi)有對(duì) NaN 進(jìn)行判斷,在日常開(kāi)發(fā)中出現(xiàn) NaN 是一件不好的事情,所以小二就沒(méi)有把它加到判斷中去了,如果有需要可以利用 isNaN() 這個(gè)方法來(lái)進(jìn)行判斷。

一起成長(zhǎng)
在困惑的城市里總少不了并肩同行的 伙伴 讓我們一起成長(zhǎng)。

如果您想讓更多人看到文章可以點(diǎn)個(gè) 點(diǎn)贊。

如果您想激勵(lì)小二可以到 Github 給個(gè) 小星星。

如果您想與小二更多交流添加微信 m353839115。

本文原稿來(lái)自 PushMeTop

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/102717.html

相關(guān)文章

  • 2017文章總結(jié)

    摘要:歡迎來(lái)我的個(gè)人站點(diǎn)性能優(yōu)化其他優(yōu)化瀏覽器關(guān)鍵渲染路徑開(kāi)啟性能優(yōu)化之旅高性能滾動(dòng)及頁(yè)面渲染優(yōu)化理論寫(xiě)法對(duì)壓縮率的影響唯快不破應(yīng)用的個(gè)優(yōu)化步驟進(jìn)階鵝廠大神用直出實(shí)現(xiàn)網(wǎng)頁(yè)瞬開(kāi)緩存網(wǎng)頁(yè)性能管理詳解寫(xiě)給后端程序員的緩存原理介紹年底補(bǔ)課緩存機(jī)制優(yōu)化動(dòng) 歡迎來(lái)我的個(gè)人站點(diǎn) 性能優(yōu)化 其他 優(yōu)化瀏覽器關(guān)鍵渲染路徑 - 開(kāi)啟性能優(yōu)化之旅 高性能滾動(dòng) scroll 及頁(yè)面渲染優(yōu)化 理論 | HTML寫(xiě)法...

    dailybird 評(píng)論0 收藏0
  • 2017文章總結(jié)

    摘要:歡迎來(lái)我的個(gè)人站點(diǎn)性能優(yōu)化其他優(yōu)化瀏覽器關(guān)鍵渲染路徑開(kāi)啟性能優(yōu)化之旅高性能滾動(dòng)及頁(yè)面渲染優(yōu)化理論寫(xiě)法對(duì)壓縮率的影響唯快不破應(yīng)用的個(gè)優(yōu)化步驟進(jìn)階鵝廠大神用直出實(shí)現(xiàn)網(wǎng)頁(yè)瞬開(kāi)緩存網(wǎng)頁(yè)性能管理詳解寫(xiě)給后端程序員的緩存原理介紹年底補(bǔ)課緩存機(jī)制優(yōu)化動(dòng) 歡迎來(lái)我的個(gè)人站點(diǎn) 性能優(yōu)化 其他 優(yōu)化瀏覽器關(guān)鍵渲染路徑 - 開(kāi)啟性能優(yōu)化之旅 高性能滾動(dòng) scroll 及頁(yè)面渲染優(yōu)化 理論 | HTML寫(xiě)法...

    hellowoody 評(píng)論0 收藏0
  • 2017文章總結(jié)

    摘要:歡迎來(lái)我的個(gè)人站點(diǎn)性能優(yōu)化其他優(yōu)化瀏覽器關(guān)鍵渲染路徑開(kāi)啟性能優(yōu)化之旅高性能滾動(dòng)及頁(yè)面渲染優(yōu)化理論寫(xiě)法對(duì)壓縮率的影響唯快不破應(yīng)用的個(gè)優(yōu)化步驟進(jìn)階鵝廠大神用直出實(shí)現(xiàn)網(wǎng)頁(yè)瞬開(kāi)緩存網(wǎng)頁(yè)性能管理詳解寫(xiě)給后端程序員的緩存原理介紹年底補(bǔ)課緩存機(jī)制優(yōu)化動(dòng) 歡迎來(lái)我的個(gè)人站點(diǎn) 性能優(yōu)化 其他 優(yōu)化瀏覽器關(guān)鍵渲染路徑 - 開(kāi)啟性能優(yōu)化之旅 高性能滾動(dòng) scroll 及頁(yè)面渲染優(yōu)化 理論 | HTML寫(xiě)法...

    wwolf 評(píng)論0 收藏0
  • 每日 30 ? 數(shù)組轉(zhuǎn)CSV表格數(shù)據(jù)

    showImg(https://segmentfault.com/img/remote/1460000018771004?w=900&h=500); 簡(jiǎn)介 數(shù)組、CSV、表格、工具 將一個(gè)數(shù)組轉(zhuǎn)化為逗號(hào)為分割符的字符串(CSV)即表格數(shù)據(jù)。 // 該源碼來(lái)自于 https://30secondsofcode.org const arrayToCSV = (arr, delimiter = ,) =...

    nanchen2251 評(píng)論0 收藏0
  • 每日 30 ? 簡(jiǎn)單的 HTTP 工具

    showImg(https://raw.githubusercontent.com/pushmetop/resource/master/30-seconds-for-everyday/simple-http/poster.png); 簡(jiǎn)介 XMLHttpRequest、HTTP 工具原理、XHR jQuery.ajax、axios 和 新的 Web API fetch 在瀏覽器不支持的兼容代碼都是...

    陳偉 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<