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

資訊專欄INFORMATION COLUMN

前端實(shí)用小工具

elarity / 3228人閱讀

摘要:類型判斷判斷的類型,單單用并無法完全滿足,這其實(shí)并不是,本質(zhì)原因是的萬物皆對(duì)象的理論。獲取參數(shù)全局尺寸設(shè)置說明常用長(zhǎng)度單位。

1、類型判斷

判斷 Target 的類型,單單用 typeof 并無法完全滿足,這其實(shí)并不是 bug,本質(zhì)原因是 JS 的萬物皆對(duì)象的理論。因此要真正完美判斷時(shí),我們需要區(qū)分對(duì)待:

基本類型(null): 使用 String(null)

基本類型(string / number / boolean /undefined) + function: 直接使用 typeof即可

其余引用類型(Array / Date / RegExp Error): 調(diào)用toString后根據(jù)[object XXX]進(jìn)行判斷

很穩(wěn)的判斷封裝:

let class2type = {}
"Array Date RegExp Object Error".split(" ").forEach(e => class2type[ "[object " + e + "]" ] = e.toLowerCase()) 

function type(obj) {
    if (obj == null) return String(obj)
    return typeof obj === "object" ? class2type[ Object.prototype.toString.call(obj) ] || "object" : typeof obj
}

2、防抖和節(jié)流
摘自https://segmentfault.com/a/11...

防抖 (debounce): 將多次高頻操作優(yōu)化為只在最后一次執(zhí)行,通常使用的場(chǎng)景是:用戶輸入,只需再輸入完成后做一次輸入校驗(yàn)即可。

function debounce(fn, wait, immediate) {
    let timer = null

    return function() {
        let args = arguments
        let context = this

        if (immediate && !timer) {
            fn.apply(context, args)
        }

        if (timer) clearTimeout(timer)
        timer = setTimeout(() => {
            fn.apply(context, args)
        }, wait)
    }
}

節(jié)流(throttle): 每隔一段時(shí)間后執(zhí)行一次,也就是降低頻率,將高頻操作優(yōu)化成低頻操作,通常使用場(chǎng)景: 滾動(dòng)條事件 或者 resize 事件,通常每隔 100~500 ms執(zhí)行一次即可。

function throttle(fn, wait, immediate) {
    let timer = null
    let callNow = true
    
    return function() {
        let context = this,
            args = arguments

        if (callNow) {
            fn.apply(context, args)
            callNow = false
        }

        if (!timer) {
            timer = setTimeout(() => {
                fn.apply(context, args)
                timer = null
            }, wait)
        }
    }
}

3、獲取URL參數(shù)

function getUrlKey(name){
    return encodeURIComponent((new RegExp("[?|&]" + name + "=" + "([^&;]+?)(&|#|;|$)").exec(location.href)||[,""])[1].replace(/+g,"%20")) || null;
}

4、全局尺寸設(shè)置
說明:常用長(zhǎng)度單位px、em、rem。其中px是物理像素,固定大小,無自適應(yīng)特點(diǎn);em是相對(duì)單位,以父元素大小為基準(zhǔn)倍率,但累計(jì)疊乘,容易出錯(cuò);rem相對(duì)單位,以根元素大小為基準(zhǔn)倍率(document.documentElement.style.fontSize),不疊加,可實(shí)現(xiàn)準(zhǔn)確自適應(yīng)。

;(function(win,doc){
    function setRem(){
        //以iphone6為標(biāo)準(zhǔn),按屏幕大小實(shí)現(xiàn)屏幕基礎(chǔ)尺寸縮放,16px是文檔的默認(rèn)尺寸(即1rem默認(rèn)為16px),為方便計(jì)算可變更為50或者100(對(duì)應(yīng)1rem=50px或者100px)
        doc.documentElement.style.fontSize = 16 * doc.documentElement.clientWidth / 375 + "px";
    }
    setRem();
    //監(jiān)聽resize事件,屏幕大小發(fā)生變化時(shí),隨時(shí)變換基礎(chǔ)尺寸
    win.addEventListener("resize",function(){
        setRem();
    },false);
})(window,document)

5、深拷貝數(shù)據(jù)
應(yīng)用類型(array、object)按引用使用,不能復(fù)制,想要復(fù)制(深拷貝)需要新建對(duì)象,把目標(biāo)的對(duì)象的屬性逐個(gè)拷貝。

function copyArr (arr){
    return arr.map((e) => {
        if(typeof e ==="object"){
            return Object.assign({},e)
        }else {
            return e
        }
    })
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/117369.html

相關(guān)文章

  • 前端實(shí)用工具

    摘要:類型判斷判斷的類型,單單用并無法完全滿足,這其實(shí)并不是,本質(zhì)原因是的萬物皆對(duì)象的理論。獲取參數(shù)全局尺寸設(shè)置說明常用長(zhǎng)度單位。 1、類型判斷 判斷 Target 的類型,單單用 typeof 并無法完全滿足,這其實(shí)并不是 bug,本質(zhì)原因是 JS 的萬物皆對(duì)象的理論。因此要真正完美判斷時(shí),我們需要區(qū)分對(duì)待: 基本類型(null): 使用 String(null) 基本類型(string...

    andot 評(píng)論0 收藏0
  • 前端實(shí)用工具

    摘要:類型判斷判斷的類型,單單用并無法完全滿足,這其實(shí)并不是,本質(zhì)原因是的萬物皆對(duì)象的理論。獲取參數(shù)全局尺寸設(shè)置說明常用長(zhǎng)度單位。 1、類型判斷 判斷 Target 的類型,單單用 typeof 并無法完全滿足,這其實(shí)并不是 bug,本質(zhì)原因是 JS 的萬物皆對(duì)象的理論。因此要真正完美判斷時(shí),我們需要區(qū)分對(duì)待: 基本類型(null): 使用 String(null) 基本類型(string...

    meislzhua 評(píng)論0 收藏0
  • 前端實(shí)用書簽(持續(xù)更新)

    摘要:前言一直混跡社區(qū)突然發(fā)現(xiàn)自己收藏了不少好文但是管理起來有點(diǎn)混亂所以將前端主流技術(shù)做了一個(gè)書簽整理不求最多最全但求最實(shí)用。 前言 一直混跡社區(qū),突然發(fā)現(xiàn)自己收藏了不少好文但是管理起來有點(diǎn)混亂; 所以將前端主流技術(shù)做了一個(gè)書簽整理,不求最多最全,但求最實(shí)用。 書簽源碼 書簽導(dǎo)入瀏覽器效果截圖showImg(https://segmentfault.com/img/bVbg41b?w=107...

    sshe 評(píng)論0 收藏0
  • 前端工具【3】—— 圖片處理

    摘要:切圖主要是用的工具就是等等,除此之外,在開發(fā)過程中我們也會(huì)用到其他工具,以下介紹一些有關(guān)于圖片處理的操作。是打開文件捕捉活動(dòng)窗口捕獲窗口捕獲矩形區(qū)域,可自行截圖。新版的比之前那些版本增加了一鍵導(dǎo)出功能,這個(gè)功能很大程度方便了我們拆分圖片。 在寫頁面之前,很重要的一個(gè)技能是切圖,根據(jù)UI設(shè)計(jì)的設(shè)計(jì)圖,在了解頁面結(jié)構(gòu)和操作后進(jìn)行分割,取出自己在開發(fā)過程中是用到的圖片資源。切圖主要是用的工具...

    MobService 評(píng)論0 收藏0
  • 前端工具【3】—— 圖片處理

    摘要:切圖主要是用的工具就是等等,除此之外,在開發(fā)過程中我們也會(huì)用到其他工具,以下介紹一些有關(guān)于圖片處理的操作。是打開文件捕捉活動(dòng)窗口捕獲窗口捕獲矩形區(qū)域,可自行截圖。新版的比之前那些版本增加了一鍵導(dǎo)出功能,這個(gè)功能很大程度方便了我們拆分圖片。 在寫頁面之前,很重要的一個(gè)技能是切圖,根據(jù)UI設(shè)計(jì)的設(shè)計(jì)圖,在了解頁面結(jié)構(gòu)和操作后進(jìn)行分割,取出自己在開發(fā)過程中是用到的圖片資源。切圖主要是用的工具...

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

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

0條評(píng)論

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