国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

js類型判斷

mylxsw / 1105人閱讀

摘要:類型轉換中會將也識別為而且返回的類型比少我們用來實現第一版但是這樣寫一個個去判斷數組函數對象的話很麻煩比較過程化第二版我們想用的方式返回對應的類型字符串因為是小寫所以我們也返回小寫的標準代表截止到倒數一位但是這樣每次都需要對判斷的類型進

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

相關文章

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

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

    tanglijun 評論0 收藏0
  • js筆記內容

    摘要:定義運算符用來判斷一個構造函數的屬性所指向的對象是否存在另外一個要檢測對象的原型鏈上,用于引用類型。但其實,實例的來自于構造函數的。 一、關于css 樣式優先級: 行內樣式>id選擇器樣式>類選擇器樣式>標簽選擇器樣式>通配符選擇器的樣式>繼承樣式>默認樣式 二、關于js 關于問題:**JavaScript中的所有事物都是對象??** 從typeof和instanceo...

    n7then 評論0 收藏0
  • Js基礎知識(一) - 變量

    摘要:內置函數和對象中內置了一些函數和對象,很多語言都會有內置的方法,直接可以調用開發。根據語法標準提供的內置函數包括和。注意基礎語法提供的內置函數和方法只有這些,像那是瀏覽器提供給我們的。強制類型轉換大家應該都知道。 js基礎 - 變量 *大家對js一定不會陌生,入門很簡單(普通入門),很多人通過網絡資源、書籍、課堂等很多途徑學習js,但是有些js基礎的只是往往被大家遺漏,本章就從js變量...

    leone 評論0 收藏0
  • Js基礎知識(一) - 變量

    摘要:內置函數和對象中內置了一些函數和對象,很多語言都會有內置的方法,直接可以調用開發。根據語法標準提供的內置函數包括和。注意基礎語法提供的內置函數和方法只有這些,像那是瀏覽器提供給我們的。強制類型轉換大家應該都知道。 js基礎 - 變量 *大家對js一定不會陌生,入門很簡單(普通入門),很多人通過網絡資源、書籍、課堂等很多途徑學習js,但是有些js基礎的只是往往被大家遺漏,本章就從js變量...

    MageekChiu 評論0 收藏0
  • js

    摘要:所以我們又可以得出一個結論原型的屬性指向構造函數,構造函數又通過屬性指回原型,但是并不是所有函數都具有這個屬性,就沒有這個屬性。 1.原始類型 boolean number string null undefined symbol原始類型儲存的都是值,是沒有函數可以調用的,undefined.toString() 顯示報錯,但是1.toString() // 1 ; 是因為1被強制轉...

    pubdreamcc 評論0 收藏0

發表評論

0條評論

mylxsw

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<