国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

詳解js類型判斷

2024-05-06 15:33:57
字體:
來源:轉載
供稿:網友

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函數里面, 利用閉包,優化性能,不用每次判斷都聲明一次typessvar 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);}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 广水市| 杨浦区| 新余市| 郎溪县| 唐河县| 建德市| 常德市| 甘肃省| 桃园县| 浦江县| 平度市| 龙山县| 孝昌县| 澄城县| 剑阁县| 遂宁市| 伊金霍洛旗| 宕昌县| 石渠县| 星子县| 蒲江县| 沭阳县| 辽阳市| 防城港市| 石泉县| 金川县| 河北省| 桂林市| 乌拉特中旗| 永寿县| 白玉县| 曲靖市| 安岳县| 贵州省| 保康县| 天镇县| 安丘市| 临高县| 钟祥市| 鲁山县| 武宁县|