摘要:類型轉(zhuǎn)換中會將也識別為而且返回的類型比少我們用來實現(xiàn)第一版但是這樣寫一個個去判斷數(shù)組函數(shù)對象的話很麻煩比較過程化第二版我們想用的方式返回對應的類型字符串因為是小寫所以我們也返回小寫的標準代表截止到倒數(shù)一位但是這樣每次都需要對判斷的類型進
js類型轉(zhuǎn)換中typeof會將null也識別為object, 而且返回的類型比少,我們用Object.prototype.toString來實現(xiàn)第一版
function isArray(value){ return Object.prototype.toString.call(value) === "[object Array]"; } function isFunction(value){ return Object.prototype.toString.call(value) === "[object Function]"; }
但是這樣寫,一個個去判斷數(shù)組,函數(shù),對象的話很麻煩,比較過程化
第二版我們想用type(obj)的方式返回對應的類型字符串,因為typeof是小寫,所以我們也返回小寫的標準
function type(obj){ // -1 代表截止到倒數(shù)一位 return Object.prototype.toString.call(obj).slice(8,-1).toLowerCase() } type([]) // "array"
但是這樣每次都需要對判斷的類型進行slice和toLowerCase也是比較耗性能的, 而且判斷類型只有幾種,所以我們可以用對象提前將可能的結(jié)果緩存起來
第三版//將types放外面 而不是放在type函數(shù)里面, 利用閉包,優(yōu)化性能,不用每次判斷都聲明一次typess var types = { "[object Function]": "function", "[object Number]": "number", ... } function type(obj) { var str = Object.prototype.toString.call(obj) return types[str] }
當然上面的types我們還可以這樣優(yōu)化
// 參考自jquery源碼 var types = {} 當然也可以直接用數(shù)組存儲 "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 是為了防止沒傳參數(shù)的時候后面報錯 // Uncaught TypeError: Cannot read property "window" of undefined的錯誤 return obj !== undefined && obj === obj.window; }判斷是不是dom元素
isElement = function(obj) { return !!(obj && obj.nodeType === 1); }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/95165.html
摘要:最近開始看源碼,并將源碼解讀放在了我的計劃中。今天就跟大家聊一聊中一些常用類型檢查方法,以及一些工具類的判斷方法。用是否含有屬性來判斷工具類判斷方法接下來看下一些常用的工具類判斷方法。 Why underscore 最近開始看 underscore.js 源碼,并將 underscore.js 源碼解讀 放在了我的 2016 計劃中。 閱讀一些著名框架類庫的源碼,就好像和一個個大師對話...
摘要:定義運算符用來判斷一個構(gòu)造函數(shù)的屬性所指向的對象是否存在另外一個要檢測對象的原型鏈上,用于引用類型。但其實,實例的來自于構(gòu)造函數(shù)的。 一、關(guān)于css 樣式優(yōu)先級: 行內(nèi)樣式>id選擇器樣式>類選擇器樣式>標簽選擇器樣式>通配符選擇器的樣式>繼承樣式>默認樣式 二、關(guān)于js 關(guān)于問題:**JavaScript中的所有事物都是對象??** 從typeof和instanceo...
摘要:內(nèi)置函數(shù)和對象中內(nèi)置了一些函數(shù)和對象,很多語言都會有內(nèi)置的方法,直接可以調(diào)用開發(fā)。根據(jù)語法標準提供的內(nèi)置函數(shù)包括和。注意基礎語法提供的內(nèi)置函數(shù)和方法只有這些,像那是瀏覽器提供給我們的。強制類型轉(zhuǎn)換大家應該都知道。 js基礎 - 變量 *大家對js一定不會陌生,入門很簡單(普通入門),很多人通過網(wǎng)絡資源、書籍、課堂等很多途徑學習js,但是有些js基礎的只是往往被大家遺漏,本章就從js變量...
摘要:內(nèi)置函數(shù)和對象中內(nèi)置了一些函數(shù)和對象,很多語言都會有內(nèi)置的方法,直接可以調(diào)用開發(fā)。根據(jù)語法標準提供的內(nèi)置函數(shù)包括和。注意基礎語法提供的內(nèi)置函數(shù)和方法只有這些,像那是瀏覽器提供給我們的。強制類型轉(zhuǎn)換大家應該都知道。 js基礎 - 變量 *大家對js一定不會陌生,入門很簡單(普通入門),很多人通過網(wǎng)絡資源、書籍、課堂等很多途徑學習js,但是有些js基礎的只是往往被大家遺漏,本章就從js變量...
摘要:所以我們又可以得出一個結(jié)論原型的屬性指向構(gòu)造函數(shù),構(gòu)造函數(shù)又通過屬性指回原型,但是并不是所有函數(shù)都具有這個屬性,就沒有這個屬性。 1.原始類型 boolean number string null undefined symbol原始類型儲存的都是值,是沒有函數(shù)可以調(diào)用的,undefined.toString() 顯示報錯,但是1.toString() // 1 ; 是因為1被強制轉(zhuǎn)...
閱讀 1478·2021-09-02 09:53
閱讀 2729·2021-07-29 13:50
閱讀 1773·2019-08-30 11:07
閱讀 1626·2019-08-30 11:00
閱讀 1510·2019-08-29 14:00
閱讀 1911·2019-08-29 12:52
閱讀 2627·2019-08-29 11:11
閱讀 3483·2019-08-26 12:23