15條高效的JS技巧闺骚,你千萬要收藏好了

1、延遲函數(shù)delay

const delay = ms => new Promise((resolve, reject) => setTimeout(resolve, ms)) const getData = status => new Promise((resolve, reject) => { ? ? status ? resolve('done') : reject('fail') }) const getRes = async (data) => { ? ? try { ? ? ? ? const res = await getData(data) ? ? ? ? const timestamp = new Date().getTime() ? ? ? ? await delay(1000) ? ? ? ? console.log(res, new Date().getTime() -?timestamp) ? ? } catch (error) { ? ? ? ? console.log(error) ? ? } } getRes(true) // 隔了1秒

2、分割指定長度的元素數(shù)組

const listChunk = (list, size = 1, cacheList = []) => { ? ? const tmp = [...list] ? ? if (size <= 0) { ? ? ? ? return cacheList ? ? } ? ? while (tmp.length) { ? ? ? ? cacheList.push(tmp.splice(0, size)) ? ? } ? ? return cacheList } console.log(listChunk([1, 2, 3, 4, 5, 6, 7, 8, 9])) // [[1], [2], [3], [4], [5], [6], [7], [8], [9]] console.log(listChunk([1, 2, 3, 4, 5, 6, 7, 8, 9], 3)) // [[1, 2, 3], [4, 5, 6], [7, 8, 9]] console.log(listChunk([1, 2, 3, 4, 5, 6, 7, 8, 9], 0)) // [] console.log(listChunk([1, 2, 3, 4, 5, 6, 7, 8, 9], -1)) // []

3、獲取數(shù)組交集

const intersection = (list, ...args) => list.filter(item => args.every(list => list.includes(item))) console.log(intersection([2, 1], [2, 3])) // [2] console.log(intersection([1, 2], [3, 4])) // []


4啸胧、函數(shù)柯里

const curring = fn => { ? ? const { length } = fn ? ? const curried = (...args) => { ? ? ? ? return (args.length >= length ? ? ? ? ? ? ? ? fn(...args) ? ? ? ? ? ? ? : (...args2) => curried(...args.concat(args2))) ? ? } ? ? return curried } const listMerge = (a, b, c) => [a, b, c] const curried = curring(listMerge) console.log(curried(1)(2)(3)) // [1, 2, 3] console.log(curried(1, 2)(3)) // [1, 2, 3] console.log(curried(1, 2, 3)) // [1, 2, 3]

5赶站、字符串前面空格去除與替換

const trimStart = str => str.replace(new RegExp('^([\\s]*)(.*)$'), '$2') console.log(trimStart(' abc ')) // abc ? console.log(trimStart('123 ')) // 123


6、字符串后面空格去除與替換

const trimEnd = str => str.replace(new RegExp('^(.*?)([\\s]*)$'), '$1') console.log(trimEnd(' abc ')) // ? abc ? console.log(trimEnd('123 ')) // 123


7纺念、獲取當前子元素是其父元素下子元素的排位

const getIndex = el => { ? ? if (!el) { ? ? ? ? return -1 ? ? } ? ? let index = 0 ? ? do { ? ? ? ? index++ ? ? } while (el = el.previousElementSibling); ? ? return index }


8贝椿、獲取當前元素相對于document的偏移量

const getOffset = el => { ? ? const { ? ? ? ? top, ? ? ? ? left ? ? } = el.getBoundingClientRect() ? ? const { ? ? ? ? scrollTop, ? ? ? ? scrollLeft ? ? } = document.body ? ? return { ? ? ? ? top: top + scrollTop, ? ? ? ? left: left + scrollLeft ? ? } }


9、獲取元素類型

const dataType = obj => Object.prototype.toString.call(obj).replace(/^\[object (.+)\]$/, '$1').toLowerCase();

10陷谱、判斷是否是移動端

const isMobile = () => 'ontouchstart' in window

11烙博、fade動畫

const fade = (el, type = 'in') { ? ? el.style.opacity = (type === 'in' ? 0 : 1) ? ? let last = +new Date() ? ? const tick = () => { ? ? ? ? const opacityValue = (type === 'in' ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (new Date() - last) / 400 ? ? ? ? ? ? ? ? ? ? ? ? ? ? : -(new Date() - last) / 400) ? ? ? ? el.style.opacity = +el.style.opacity + opacityValue ? ? ? ? last = +new Date() ? ? ? ? if (type === 'in' ? ? ? ? ? ? (+el.style.opacity < 1) ? ? ? ? ? : (+el.style.opacity > 0)) { ? ? ? ? ? ? requestAnimationFrame(tick) ? ? ? ? } ? ? } ? ? tick() }


12、將指定格式的字符串解析為日期字符串

const dataPattern = (str, format = '-') => { ? ? if (!str) { ? ? ? ? return new Date() ? ? } ? ? const dateReg = new RegExp(`^(\\d{2})${format}(\\d{2})${format}(\\d{4})$`) ? ? const [, month, day, year] = dateReg.exec(str) ? ? return new Date(`${month}, ${day} ${year}`) } console.log(dataPattern('12-25-1995')) // Mon Dec 25 1995 00:00:00 GMT+0800 (中國標準時間)


13烟逊、禁止網頁復制粘貼

const html = document.querySelector('html') html.oncopy = () => false html.onpaste = () => false

14渣窜、input框限制只能輸入中文

const input = document.querySelector('input[type="text"]') const clearText = target => { ? ? const { ? ? ? ? value ? ? } = target ? ? target.value = value.replace(/[^\u4e00-\u9fa5]/g, '') } input.onfocus = ({target}) => { ? ? clearText(target) } input.onkeyup = ({target}) => { ? ? clearText(target) } input.onblur = ({target}) => { ? ? clearText(target) } input.oninput = ({target}) => {?clearText(target) }

15、去除字符串的html代碼

const removehtml = (str = '') => str.replace(/<[\/\!]*[^<>]*>/ig, '') console.log(removehtml('<h1>哈哈哈哈<呵呵呵</h1>')) // 哈哈哈哈<呵呵呵

?本文完~

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末宪躯,一起剝皮案震驚了整個濱河市图毕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌眷唉,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件囤官,死亡現(xiàn)場離奇詭異冬阳,居然都是意外死亡,警方通過查閱死者的電腦和手機党饮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門肝陪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人刑顺,你說我怎么就攤上這事氯窍。” “怎么了蹲堂?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵狼讨,是天一觀的道長。 經常有香客問我柒竞,道長政供,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任朽基,我火速辦了婚禮布隔,結果婚禮上,老公的妹妹穿的比我還像新娘稼虎。我一直安慰自己衅檀,他們只是感情好,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布霎俩。 她就那樣靜靜地躺著哀军,像睡著了一般沉眶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上排苍,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天沦寂,我揣著相機與錄音,去河邊找鬼淘衙。 笑死传藏,一個胖子當著我的面吹牛,可吹牛的內容都是我干的彤守。 我是一名探鬼主播毯侦,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼具垫!你這毒婦竟也來了侈离?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤筝蚕,失蹤者是張志新(化名)和其女友劉穎卦碾,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體起宽,經...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡洲胖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了坯沪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绿映。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖腐晾,靈堂內的尸體忽然破棺而出叉弦,到底是詐尸還是另有隱情,我是刑警寧澤藻糖,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布淹冰,位于F島的核電站,受9級特大地震影響巨柒,放射性物質發(fā)生泄漏榄棵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一潘拱、第九天 我趴在偏房一處隱蔽的房頂上張望疹鳄。 院中可真熱鬧,春花似錦芦岂、人聲如沸瘪弓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腺怯。三九已至袱饭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間呛占,已是汗流浹背虑乖。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留晾虑,地道東北人疹味。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像帜篇,于是被迫代替她去往敵國和親糙捺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344