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

資訊專欄INFORMATION COLUMN

JS類型(三):JS類型檢查

ad6623 / 1250人閱讀

摘要:正文一基本類型檢測(cè)為什么說是基本類型檢測(cè)對(duì)于這三種類型經(jīng)常用到的基本類型檢測(cè)是正確的。為什么說是更好的檢測(cè)方法上面的兩種方法要么是只能檢測(cè)基本類型,要么是只能檢測(cè)引用類型,還存在不支持檢測(cè)的情況。

前言

前兩篇文章主要是一直在討論JS類型的轉(zhuǎn)換,那么怎么才能檢測(cè)JS的數(shù)據(jù)類型呢?
檢測(cè)數(shù)據(jù)類型在工程中經(jīng)常用到,常見的JS類型檢測(cè)有三種方法:

1. typeof
2. instanceof
3. Object.prototype.toString

那么在實(shí)際的操作中,我們應(yīng)該如何選擇使用呢?每種方法都是可以的嘛?這篇文章就帶哦你全面分析這三種類型檢測(cè)的方法,助你掌握J(rèn)S類型檢查的知識(shí)。

正文 一 ."typeof" 基本類型檢測(cè)

1.為什么說typeof是基本類型檢測(cè)?

1)typeof對(duì)于string、number、boolean 這三種類型(經(jīng)常用到的基本類型)檢測(cè)是正確的。
2)對(duì)于undefined返回undefined
3)對(duì)于null返回object,null本身就是指空指針對(duì)象

2.如果用typeof檢查引用類型呢?

1)對(duì)于函數(shù)對(duì)象類型檢測(cè),會(huì)返回"function"
2)對(duì)于其他的對(duì)象進(jìn)行檢測(cè),返回"object"

3.應(yīng)該注意的地方

針對(duì)經(jīng)常出現(xiàn)的來說
1)null => object
2)Array => object

所以在確認(rèn)只可能返回string、number、boolean undefined 這四種類型的情況下,typeof檢測(cè)類型的方法是可以選的。

4. typeof 實(shí)現(xiàn)原理
js 在底層存儲(chǔ)變量的時(shí)候,會(huì)在變量的機(jī)器碼的低位1-3位存儲(chǔ)其類型信息:

000:對(duì)象
010:浮點(diǎn)數(shù)
100:字符串
110:布爾
1:整數(shù)

but, 對(duì)于 undefined 和 null 來說,這兩個(gè)值的信息存儲(chǔ)是有點(diǎn)特殊的。
null:所有機(jī)器碼均為0
undefined:用 ?2^30 整數(shù)來表示
所以,typeof 在判斷 null 的時(shí)候就出現(xiàn)問題了,由于 null 的所有機(jī)器碼均為0,因此直接被當(dāng)做了對(duì)象來看待。

二. "instanceof" 檢測(cè)引用類型

1.首先要弄懂 instanceof的用法

下面內(nèi)容來自MDN對(duì)instanceof的解釋:

1)語法:首先左側(cè)是一個(gè)對(duì)象,例如 數(shù)組、函數(shù)、普通對(duì)象等;右側(cè)是一個(gè)構(gòu)造函數(shù),例如 Array Function Object

2)描述:這句話很重要--instanceof 檢測(cè)的是 constructor.proptotype 是否存在于 object的原型鏈上

2. 下面是使用instanceof方法進(jìn)行JS類型檢測(cè)的內(nèi)容


從上圖中可以看出:

1)instanceof對(duì)于Object Array Function 這樣的引用類型檢測(cè)是完全沒有問題的
2)不支持基本類型的檢測(cè)
3)undefined null檢測(cè)都是不支持的
4)因?yàn)闄z測(cè)的是原型鏈,所以[ ] instanceof Object 這樣寬松的檢查也是返回true

3.總結(jié)
instanceof 完全適用于檢測(cè)Object Array Function 這樣的引用類型,不支持基本類型檢測(cè)。

4."instanceof" 檢測(cè)的局限性
工程中最常用的就是檢測(cè)數(shù)據(jù)是對(duì)象還是數(shù)組或者函數(shù),instanceof已經(jīng)足夠用了,但是有種情況下可能檢測(cè)不準(zhǔn)確,雖然這種情況在當(dāng)下大多數(shù)工程中不經(jīng)常出現(xiàn)。

三."Object.prototype.toString" 更好的檢測(cè)方法

我們可以利用Object原型上的toString方法來做更多的事情。
為什么說Object.prototype.toString 是更好的檢測(cè)方法?上面的兩種方法要么是只能檢測(cè)基本類型,要么是只能檢測(cè)引用類型,還存在undefined null不支持檢測(cè)的情況。有沒有一種萬能檢測(cè)的方法可以準(zhǔn)確的檢測(cè)呢?

看到上面的圖大家都笑了吧~ 看看Object.prototype.toString 的魔力有多大,大家放心的使用吧!

友情提示:
代碼中經(jīng)常這么用:

function getDataType(data){
    const typeString = Object.prototype.toString.call(data);
    const type = typeString.slice(8);
    return type;
}
后記

現(xiàn)在檢測(cè)類型的方法有很多了,例如,用來檢測(cè)數(shù)組類型的Array.isArray()已經(jīng)很常用了。大家根據(jù)實(shí)際情況來進(jìn)行選擇使用吧~~ 如果你還想知道怎么判斷一個(gè)數(shù)組是類數(shù)組或者更多檢測(cè)類型的方法,建議看看underscorejs的實(shí)現(xiàn)方式。

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

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

相關(guān)文章

  • vue2.0項(xiàng)目配置flow類型檢查

    摘要:在的項(xiàng)目中加入類型檢查。當(dāng)前項(xiàng)目是用寫的,當(dāng)項(xiàng)目越來越大,由于弱類型的特性,相比這種強(qiáng)類型的語言而言,后期維護(hù)會(huì)越來越困難。為了解決這個(gè)問題,決定使用加入類型檢查。一了解是公布的靜態(tài)類型檢查器。中配置配置,使其支持語法。 在vue2.0的項(xiàng)目中加入flow類型檢查。當(dāng)前項(xiàng)目是用js寫的,當(dāng)項(xiàng)目越來越大,由于js弱類型的特性,相比ts(typescript)這種強(qiáng)類型的語言而言,后期維護(hù)...

    Rocko 評(píng)論0 收藏0
  • JavaScript類型檢查之Flow

    摘要:一是一種弱類型動(dòng)態(tài)類型檢查的語言。動(dòng)態(tài)類型與靜態(tài)類型的核心區(qū)別動(dòng)態(tài)類型的類型檢查是是在代碼運(yùn)行的時(shí)候進(jìn)行的,靜態(tài)類型的類型檢查則是在編譯時(shí)進(jìn)行。 一、js是一種弱類型、動(dòng)態(tài)類型檢查的語言。 弱類型:在定義變量時(shí),可以為變量定義復(fù)制任何數(shù)據(jù),變量的數(shù)據(jù)類型不是固定死的,這樣的類型叫做弱類型。 var a = 10; a = abc; a = []; a = function() {}...

    zhonghanwen 評(píng)論0 收藏0
  • JavaScript 需要檢查變量類型

    摘要:一返回值調(diào)用外部方法獲取的值需要對(duì)類型做判斷,因?yàn)槲覀儗?duì)方法返回的值是有期望值類型,但是卻不能保證這個(gè)接口返回的值一直是同一個(gè)類型。 19年目標(biāo):消滅英語!我新開了一個(gè)公眾號(hào)記錄一個(gè)程序員學(xué)英語的歷程 有提升英語訴求的小伙伴可以關(guān)注公眾號(hào):csenglish 程序員學(xué)英語,每天花10分鐘交作業(yè),跟我一起學(xué)英語吧 javascript作為一門動(dòng)態(tài)類型語言,具有很高的動(dòng)態(tài)靈活性,當(dāng)定義函數(shù)...

    Songlcy 評(píng)論0 收藏0
  • javascript基礎(chǔ)

    摘要:一彈窗和輸出執(zhí)行順序是從上到下執(zhí)行控制瀏覽器彈出一個(gè)警告框讓計(jì)算機(jī)在頁面中輸出一個(gè)內(nèi)容在中寫一個(gè)內(nèi)容寫可以向中輸出一個(gè)內(nèi)容看我出不出來向控制臺(tái)輸出一個(gè)內(nèi)容作用是向控制臺(tái)輸出一個(gè)內(nèi)容你猜我在哪出來二編寫位置可以將代碼編寫到外部文件中,然后通過 一.彈窗和輸出 **javascript執(zhí)行順序是從上到下執(zhí)行** 1.控制瀏覽器彈出一個(gè)警告框 alert(HelloWord); 2.讓計(jì)...

    XFLY 評(píng)論0 收藏0

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

0條評(píng)論

閱讀需要支付1元查看
<