摘要:類型轉換中會將也識別為而且返回的類型比少我們用來實現第一版但是這樣寫一個個去判斷數組函數對象的話很麻煩比較過程化第二版我們想用的方式返回對應的類型字符串因為是小寫所以我們也返回小寫的標準代表截止到倒數一位但是這樣每次都需要對判斷的類型進
js類型轉換中typeof會將null也識別為object, 而且返回的類型比少,我們用Object.prototype.toString來實現第一版
function isArray(value){ return Object.prototype.toString.call(value) === "[object Array]"; } function isFunction(value){ return Object.prototype.toString.call(value) === "[object Function]"; }
但是這樣寫,一個個去判斷數組,函數,對象的話很麻煩,比較過程化
第二版我們想用type(obj)的方式返回對應的類型字符串,因為typeof是小寫,所以我們也返回小寫的標準
function type(obj){ // -1 代表截止到倒數一位 return Object.prototype.toString.call(obj).slice(8,-1).toLowerCase() } type([]) // "array"
但是這樣每次都需要對判斷的類型進行slice和toLowerCase也是比較耗性能的, 而且判斷類型只有幾種,所以我們可以用對象提前將可能的結果緩存起來
第三版//將types放外面 而不是放在type函數里面, 利用閉包,優化性能,不用每次判斷都聲明一次typess var types = { "[object Function]": "function", "[object Number]": "number", ... } function type(obj) { var str = Object.prototype.toString.call(obj) return types[str] }
當然上面的types我們還可以這樣優化
// 參考自jquery源碼 var types = {} 當然也可以直接用數組存儲 "Boolean Number String Function Array Date RegExp Object Error".split(" ").forEach(function(e,i){ types [ "[object " + e + "]" ] = e.toLowerCase(); }) ;判斷window對象
利用window對象的window屬性等于自身
function isWindow( obj ) { // obj !== undefined 是為了防止沒傳參數的時候后面報錯 // Uncaught TypeError: Cannot read property "window" of undefined的錯誤 return obj !== undefined && obj === obj.window; }判斷是不是dom元素
isElement = function(obj) { return !!(obj && obj.nodeType === 1); }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/95165.html
摘要:最近開始看源碼,并將源碼解讀放在了我的計劃中。今天就跟大家聊一聊中一些常用類型檢查方法,以及一些工具類的判斷方法。用是否含有屬性來判斷工具類判斷方法接下來看下一些常用的工具類判斷方法。 Why underscore 最近開始看 underscore.js 源碼,并將 underscore.js 源碼解讀 放在了我的 2016 計劃中。 閱讀一些著名框架類庫的源碼,就好像和一個個大師對話...
摘要:內置函數和對象中內置了一些函數和對象,很多語言都會有內置的方法,直接可以調用開發。根據語法標準提供的內置函數包括和。注意基礎語法提供的內置函數和方法只有這些,像那是瀏覽器提供給我們的。強制類型轉換大家應該都知道。 js基礎 - 變量 *大家對js一定不會陌生,入門很簡單(普通入門),很多人通過網絡資源、書籍、課堂等很多途徑學習js,但是有些js基礎的只是往往被大家遺漏,本章就從js變量...
摘要:內置函數和對象中內置了一些函數和對象,很多語言都會有內置的方法,直接可以調用開發。根據語法標準提供的內置函數包括和。注意基礎語法提供的內置函數和方法只有這些,像那是瀏覽器提供給我們的。強制類型轉換大家應該都知道。 js基礎 - 變量 *大家對js一定不會陌生,入門很簡單(普通入門),很多人通過網絡資源、書籍、課堂等很多途徑學習js,但是有些js基礎的只是往往被大家遺漏,本章就從js變量...
摘要:所以我們又可以得出一個結論原型的屬性指向構造函數,構造函數又通過屬性指回原型,但是并不是所有函數都具有這個屬性,就沒有這個屬性。 1.原始類型 boolean number string null undefined symbol原始類型儲存的都是值,是沒有函數可以調用的,undefined.toString() 顯示報錯,但是1.toString() // 1 ; 是因為1被強制轉...
閱讀 1407·2021-09-02 09:53
閱讀 2672·2021-07-29 13:50
閱讀 1720·2019-08-30 11:07
閱讀 1574·2019-08-30 11:00
閱讀 1456·2019-08-29 14:00
閱讀 1851·2019-08-29 12:52
閱讀 2567·2019-08-29 11:11
閱讀 3425·2019-08-26 12:23