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

資訊專欄INFORMATION COLUMN

js類型判斷

mylxsw / 1126人閱讀

摘要:類型轉(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

相關(guān)文章

  • 【underscore.js 源碼解讀】常用類型判斷以及一些有用的工具方法

    摘要:最近開始看源碼,并將源碼解讀放在了我的計(jì)劃中。今天就跟大家聊一聊中一些常用類型檢查方法,以及一些工具類的判斷方法。用是否含有屬性來(lái)判斷工具類判斷方法接下來(lái)看下一些常用的工具類判斷方法。 Why underscore 最近開始看 underscore.js 源碼,并將 underscore.js 源碼解讀 放在了我的 2016 計(jì)劃中。 閱讀一些著名框架類庫(kù)的源碼,就好像和一個(gè)個(gè)大師對(duì)話...

    tanglijun 評(píng)論0 收藏0
  • js筆記內(nèi)容

    摘要:定義運(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...

    n7then 評(píng)論0 收藏0
  • Js基礎(chǔ)知識(shí)(一) - 變量

    摘要:內(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變量...

    leone 評(píng)論0 收藏0
  • Js基礎(chǔ)知識(shí)(一) - 變量

    摘要:內(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變量...

    MageekChiu 評(píng)論0 收藏0
  • 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)...

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

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<