成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

類型檢查

robin / 1446人閱讀

摘要:類型檢查中有中基本數(shù)據(jù)類型,分別是還有一種復(fù)雜數(shù)據(jù)類型是松散類型的,所以使用以上種數(shù)據(jù)類型,就可以表示所有數(shù)據(jù)。從上面結(jié)果可以看到,使用在檢查數(shù)組,對(duì)象,正則表達(dá)式時(shí)都會(huì)返回如此模糊的類型檢查方法,應(yīng)用場(chǎng)景也十分有限。

js 類型檢查

js中有5中基本數(shù)據(jù)類型,分別是:

 Undefined,Null,Boolean,Number,String

還有一種復(fù)雜數(shù)據(jù)類型

  Object

ECMAScript是松散類型的,所以使用以上6種數(shù)據(jù)類型,就可以表示所有數(shù)據(jù)。
那么,如何檢測(cè)變量的數(shù)據(jù)類型呢。

下面就介紹幾種在業(yè)務(wù)代碼中,常用的幾種常用類型檢查方法

typeof

typeof操作符用以獲取一個(gè)變量或者表達(dá)式的類型。

typeof一般只能返回如下幾個(gè)結(jié)果:
 - "number",  ------eg:  typeof 2 
 - "boolean",  -----     eg:  typeof false 
 - "string", --------       eg:  typeof "123" 
 - "function"(函數(shù),),------ eg:  typeof function(){} 
 - "object"(null,數(shù)組,對(duì)象,正則表達(dá)式),  ---  typeof /s/ 
 - "undefined"。   ------    typeof hehe 
 

從上面結(jié)果可以看到, 使用typeof 在檢查 null,數(shù)組,對(duì)象,正則表達(dá)式時(shí)都會(huì)返回"object"
如此模糊的類型檢查方法,應(yīng)用場(chǎng)景也十分有限。

instanceof

如果想知道一個(gè)變量到底是什么類型的 “object”,就可以使用instanceof,

  var pattern = /s/;
  var arr = [1,2,3];
  var obj = new Object();

  alert(pattern instanceof RegExp);   // true
  alert(arr instanceof Array);        //true
  alert(obj instanceof Object);        //true
  alert(null instanceof Object);      // false;

也可以用來(lái)檢查自己創(chuàng)建的變量:

var a = new Array(); 
console.log(a instanceof Array) // 返回true。 
console.log(a instanceof Object) // 返回  Array 是object 的子類。也會(huì)返回true.

但是這個(gè)操作符的問(wèn)題在于它假定只存在一個(gè)全局的執(zhí)行環(huán)境,存在多個(gè)框架的情景下,會(huì)存在兩個(gè)不同的數(shù)組構(gòu)造函數(shù),這里就引入了另一個(gè)方法來(lái)判斷數(shù)組

isArray()

ECMAScript5 新增的Array.isArray() 方法,無(wú)論執(zhí)行環(huán)境,只有一個(gè)目的,判斷是不是數(shù)組

Object.prototype.toString.call()

原生的toString() 方法,都會(huì)返回一個(gè)[object NativeConstructorName] 格式的字符串,
通過(guò)判斷每個(gè)類在內(nèi)部的[[Class]] 屬性,來(lái)檢查類型

    var a = new Array()
    Object.prototype.toString.call(a) == "[object Array]"`
    // 使用這種方法不僅可以判斷數(shù)組,還可以判斷其他類型。
   Object.prototype.toString.call(value) =="[object Function]"
    {}.prototype.toString.call(value) =="[object JSON]" //這種方法也可以 檢查原生的JSON對(duì)象
$.type

zeptov1.0+
具體用法可以查看 官網(wǎng)文檔,用法如下

$.type(object)   ? string
獲取JavaScript 對(duì)象的類型??赡艿念愋陀校?null undefined boolean number string function array date regexp object error。

alert($.type([]))  // "array"
alert($.type("11"))  // "string"
alert($.type({}))    // "object"

然后,我們可以分析下,這個(gè)$.type 方法,使用的技巧是否不同于上面幾種類型檢查方法
查看 [email protected] 的源碼,基本和上面的 toString.call() 方法類似

type 方法的部分如下

  function type(obj) {
    return obj == null ? String(obj) :
      class2type[toString.call(obj)] || "object"
  }

代碼的關(guān)鍵部分,就是這個(gè)class2type 對(duì)象里面存放了所有數(shù)據(jù)類型對(duì)應(yīng)的字符串,使用type 方法是,直接取class2type 里面的鍵值對(duì)即可。

再往下看,就可以發(fā)現(xiàn) 使用each 方法 ,遍歷所有可能的數(shù)據(jù)類型,為class2type賦值。

  $.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
    class2type[ "[object " + name + "]" ] = name.toLowerCase()
  })

這里得到的 class2type 結(jié)果是:

 {
   [object Array]:"array"
   [object Boolean]:"boolean"
   [object Date]:"date"
   [object Error]:"error"
   [object Function]:"function"
   [object Number]:"number"
   [object Object]:"object"
   [object RegExp]:"regexp"
   [object String]:"string"
}

當(dāng)然,我們可以直接把class2type 對(duì)象拿來(lái)使用。

...

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/87239.html

相關(guān)文章

  • 介紹幾款 Python 類型檢查工具

    摘要:近日,微軟在上開(kāi)源了一個(gè)靜態(tài)類型檢查工具,引起了社區(qū)內(nèi)的多方關(guān)注。在微軟推出之前,主流的靜態(tài)檢查工具有三款官方的出的出的。微軟的有個(gè)模式,應(yīng)該是吸收了這點(diǎn),而且更加好用因?yàn)椴恍枰~外安裝和其它依賴。 showImg(https://segmentfault.com/img/bVbqujh?w=5700&h=3601);近日,微軟在 Github 上開(kāi)源了一個(gè) Python 靜態(tài)類型檢查...

    Alex 評(píng)論0 收藏0
  • Flow, 一個(gè)新的Javascript靜態(tài)類型檢查

    摘要:原文鏈接翻譯于今天我們興奮的發(fā)布了的嘗鮮版,一個(gè)新的靜態(tài)類型檢查器。為添加了靜態(tài)類型檢查,以提高開(kāi)發(fā)效率和代碼質(zhì)量。這最終形成一個(gè)高度并行增量式的檢查架構(gòu),類似。知道縮小類型范圍時(shí)做動(dòng)態(tài)檢查的影響。 原文鏈接:https://code.facebook.com/posts/1505962329687926/flow-a-new-static-type-checker-for-java...

    liangzai_cool 評(píng)論0 收藏0
  • 第3章:抽象數(shù)據(jù)類型(ADT)和面向?qū)ο缶幊蹋∣OP) 3.1數(shù)據(jù)類型類型檢查

    摘要:所有變量的類型在編譯時(shí)已知在程序運(yùn)行之前,因此編譯器也可以推導(dǎo)出所有表達(dá)式的類型。像變量的類型一樣,這些聲明是重要的文檔,對(duì)代碼讀者很有用,并由編譯器進(jìn)行靜態(tài)檢查。對(duì)象類型的值對(duì)象類型的值是由其類型標(biāo)記的圓。 大綱 1.編程語(yǔ)言中的數(shù)據(jù)類型2.靜態(tài)與動(dòng)態(tài)數(shù)據(jù)類型3.類型檢查4.易變性和不變性5.快照?qǐng)D6.復(fù)雜的數(shù)據(jù)類型:數(shù)組和集合7.有用的不可變類型8.空引用9.總結(jié) 編程語(yǔ)言中的數(shù)據(jù)...

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

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

    Songlcy 評(píng)論0 收藏0
  • 前端進(jìn)階(5) - js 擴(kuò)展:靜態(tài)類型檢查(facebook flow)

    摘要:擴(kuò)展靜態(tài)類型檢查語(yǔ)言與系列等語(yǔ)言有一點(diǎn)很大的不同,就是語(yǔ)言是弱類型語(yǔ)言。但其實(shí)很多開(kāi)發(fā)人員還是比較喜歡用來(lái)開(kāi)發(fā)項(xiàng)目,所以開(kāi)發(fā)出來(lái)幫助語(yǔ)言擴(kuò)展靜態(tài)類型檢查功能,規(guī)避上面提到的問(wèn)題。 js 擴(kuò)展:靜態(tài)類型檢查(facebook flow) js 語(yǔ)言與 java、C 系列等語(yǔ)言有一點(diǎn)很大的不同,就是 js 語(yǔ)言是弱類型語(yǔ)言。js 語(yǔ)言的這個(gè)特性可能讓大家覺(jué)得 js 很自由,沒(méi)有強(qiáng)制性的約束...

    孫淑建 評(píng)論0 收藏0
  • HelloType:JS運(yùn)行時(shí)數(shù)據(jù)類型檢查工具

    摘要:進(jìn)入主頁(yè)使用文檔是一個(gè)設(shè)計(jì)簡(jiǎn)單的運(yùn)行時(shí)的數(shù)據(jù)類型檢查工具,它可以幫助你的程序在使用某個(gè)組變量前,對(duì)變量的數(shù)據(jù)類型進(jìn)行檢查,防止在使用變量進(jìn)行運(yùn)算時(shí)由于數(shù)據(jù)類型不同導(dǎo)致報(bào)錯(cuò)。 showImg(https://segmentfault.com/img/bVbfW41?w=1380&h=500); 進(jìn)入GitHub主頁(yè)使用文檔 HelloType是一個(gè)api設(shè)計(jì)簡(jiǎn)單的js運(yùn)行時(shí)的數(shù)據(jù)類型檢查...

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

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

0條評(píng)論

閱讀需要支付1元查看
<