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