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

首頁 > 編程 > JavaScript > 正文

詳解js類型判斷

2019-11-19 13:48:17
字體:
供稿:網(wǎng)友

js類型轉(zhuǎn)換中typeof會將null也識別為object, 而且返回的類型比少,我們用Object.prototype.toString來實(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ù),對象的話很麻煩,比較過程化

第二版

我們想用type(obj)的方式返回對應(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"

但是這樣每次都需要對判斷的類型進(jìn)行slice和toLowerCase也是比較耗性能的, 而且判斷類型只有幾種,所以我們可以用對象提前將可能的結(jié)果緩存起來

第三版

//將types放外面 而不是放在type函數(shù)里面, 利用閉包,優(yōu)化性能,不用每次判斷都聲明一次typessvar 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ù)組存儲"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 是為了防止沒傳參數(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);}

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 漾濞| 长宁县| 五台县| 榆中县| 南京市| 图们市| 邓州市| 休宁县| 游戏| 抚宁县| 通城县| 晋州市| 亳州市| 罗江县| 定边县| 和田市| 陇南市| 佛坪县| 汶川县| 安仁县| 利辛县| 万山特区| 郑州市| 托克逊县| 桑植县| 金川县| 张家界市| 通许县| 增城市| 吉安县| 沭阳县| 铜陵市| 成武县| 余姚市| 景东| 雷州市| 青浦区| 乌拉特中旗| 巫溪县| 聂荣县| 元氏县|