摘要:類型檢查中有中基本數據類型,分別是還有一種復雜數據類型是松散類型的,所以使用以上種數據類型,就可以表示所有數據。從上面結果可以看到,使用在檢查數組,對象,正則表達式時都會返回如此模糊的類型檢查方法,應用場景也十分有限。
js 類型檢查
js中有5中基本數據類型,分別是:
Undefined,Null,Boolean,Number,String
還有一種復雜數據類型:
Object
ECMAScript是松散類型的,所以使用以上6種數據類型,就可以表示所有數據。
那么,如何檢測變量的數據類型呢。
下面就介紹幾種在業務代碼中,常用的幾種常用類型檢查方法
typeoftypeof操作符用以獲取一個變量或者表達式的類型。
typeof一般只能返回如下幾個結果:- "number", ------eg: typeof 2 - "boolean", ----- eg: typeof false - "string", -------- eg: typeof "123" - "function"(函數,),------ eg: typeof function(){} - "object"(null,數組,對象,正則表達式), --- typeof /s/ - "undefined"。 ------ typeof hehe
從上面結果可以看到, 使用typeof 在檢查 null,數組,對象,正則表達式時都會返回"object"
如此模糊的類型檢查方法,應用場景也十分有限。
如果想知道一個變量到底是什么類型的 “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;
也可以用來檢查自己創建的變量:
var a = new Array(); console.log(a instanceof Array) // 返回true。 console.log(a instanceof Object) // 返回 Array 是object 的子類。也會返回true.
但是這個操作符的問題在于它假定只存在一個全局的執行環境,存在多個框架的情景下,會存在兩個不同的數組構造函數,這里就引入了另一個方法來判斷數組
isArray()ECMAScript5 新增的Array.isArray() 方法,無論執行環境,只有一個目的,判斷是不是數組
Object.prototype.toString.call()原生的toString() 方法,都會返回一個[object NativeConstructorName] 格式的字符串,
通過判斷每個類在內部的[[Class]] 屬性,來檢查類型
var a = new Array() Object.prototype.toString.call(a) == "[object Array]"` // 使用這種方法不僅可以判斷數組,還可以判斷其他類型。 Object.prototype.toString.call(value) =="[object Function]" {}.prototype.toString.call(value) =="[object JSON]" //這種方法也可以 檢查原生的JSON對象$.type
zeptov1.0+
具體用法可以查看 官網文檔,用法如下
$.type(object) ? string 獲取JavaScript 對象的類型。可能的類型有: null undefined boolean number string function array date regexp object error。 alert($.type([])) // "array" alert($.type("11")) // "string" alert($.type({})) // "object"
然后,我們可以分析下,這個$.type 方法,使用的技巧是否不同于上面幾種類型檢查方法
查看 zepto@1.1.6 的源碼,基本和上面的 toString.call() 方法類似
type 方法的部分如下
function type(obj) { return obj == null ? String(obj) : class2type[toString.call(obj)] || "object" }
代碼的關鍵部分,就是這個class2type 對象里面存放了所有數據類型對應的字符串,使用type 方法是,直接取class2type 里面的鍵值對即可。
再往下看,就可以發現 使用each 方法 ,遍歷所有可能的數據類型,為class2type賦值。
$.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { class2type[ "[object " + name + "]" ] = name.toLowerCase() })
這里得到的 class2type 結果是:
{ [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" }
當然,我們可以直接把class2type 對象拿來使用。
...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/87239.html
摘要:近日,微軟在上開源了一個靜態類型檢查工具,引起了社區內的多方關注。在微軟推出之前,主流的靜態檢查工具有三款官方的出的出的。微軟的有個模式,應該是吸收了這點,而且更加好用因為不需要額外安裝和其它依賴。 showImg(https://segmentfault.com/img/bVbqujh?w=5700&h=3601);近日,微軟在 Github 上開源了一個 Python 靜態類型檢查...
摘要:原文鏈接翻譯于今天我們興奮的發布了的嘗鮮版,一個新的靜態類型檢查器。為添加了靜態類型檢查,以提高開發效率和代碼質量。這最終形成一個高度并行增量式的檢查架構,類似。知道縮小類型范圍時做動態檢查的影響。 原文鏈接:https://code.facebook.com/posts/1505962329687926/flow-a-new-static-type-checker-for-java...
摘要:所有變量的類型在編譯時已知在程序運行之前,因此編譯器也可以推導出所有表達式的類型。像變量的類型一樣,這些聲明是重要的文檔,對代碼讀者很有用,并由編譯器進行靜態檢查。對象類型的值對象類型的值是由其類型標記的圓。 大綱 1.編程語言中的數據類型2.靜態與動態數據類型3.類型檢查4.易變性和不變性5.快照圖6.復雜的數據類型:數組和集合7.有用的不可變類型8.空引用9.總結 編程語言中的數據...
摘要:一返回值調用外部方法獲取的值需要對類型做判斷,因為我們對方法返回的值是有期望值類型,但是卻不能保證這個接口返回的值一直是同一個類型。 19年目標:消滅英語!我新開了一個公眾號記錄一個程序員學英語的歷程 有提升英語訴求的小伙伴可以關注公眾號:csenglish 程序員學英語,每天花10分鐘交作業,跟我一起學英語吧 javascript作為一門動態類型語言,具有很高的動態靈活性,當定義函數...
摘要:擴展靜態類型檢查語言與系列等語言有一點很大的不同,就是語言是弱類型語言。但其實很多開發人員還是比較喜歡用來開發項目,所以開發出來幫助語言擴展靜態類型檢查功能,規避上面提到的問題。 js 擴展:靜態類型檢查(facebook flow) js 語言與 java、C 系列等語言有一點很大的不同,就是 js 語言是弱類型語言。js 語言的這個特性可能讓大家覺得 js 很自由,沒有強制性的約束...
摘要:進入主頁使用文檔是一個設計簡單的運行時的數據類型檢查工具,它可以幫助你的程序在使用某個組變量前,對變量的數據類型進行檢查,防止在使用變量進行運算時由于數據類型不同導致報錯。 showImg(https://segmentfault.com/img/bVbfW41?w=1380&h=500); 進入GitHub主頁使用文檔 HelloType是一個api設計簡單的js運行時的數據類型檢查...
閱讀 2402·2021-09-22 15:15
閱讀 647·2021-09-02 15:11
閱讀 1788·2021-08-30 09:48
閱讀 1889·2019-08-30 15:56
閱讀 1495·2019-08-30 15:52
閱讀 2048·2019-08-30 15:44
閱讀 438·2019-08-29 16:29
閱讀 1544·2019-08-29 11:06