国产探花免费观看_亚洲丰满少妇自慰呻吟_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);}

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

圖片精選

主站蜘蛛池模板: 合江县| 绥中县| 陕西省| 西丰县| 平昌县| 隆子县| 太白县| 比如县| 凉城县| 石景山区| 怀来县| 洛川县| 呼图壁县| 高邮市| 灵川县| 长寿区| 山东省| 威海市| 习水县| 平原县| 法库县| 玛沁县| 丰城市| 玉龙| 琼结县| 青冈县| 哈密市| 沈阳市| 连城县| 彭山县| 绥棱县| 二连浩特市| 宜昌市| 息烽县| 娄底市| 娱乐| 仙桃市| 三原县| 新安县| 登封市| 榆林市|