Q1: ['1', '2', '3'].map(parseInt) what & why ?
map的第一個(gè)函數(shù)默認(rèn)有三個(gè)參數(shù)(val, index, arr)
parseInt有兩個(gè)參數(shù)(val, radix)
需要注意的是 :
1.radix不傳或者默認(rèn)為0會(huì)以10進(jìn)制
2.2<radix || radix > 36 返回的值就是NaN
Q2:全局作用域中匙握,用 const 和 let 聲明的變量不在 window 上楣颠,那到底在哪里筋栋?如何去獲榷印严肪?
在塊級(jí)作用域里耍鬓,直接輸入命名就可以獲取互订。GlobalEnv是一個(gè)復(fù)合環(huán)境,包括一個(gè)由global構(gòu)成的對(duì)象環(huán)境(objEnv)和一個(gè)一般聲明的環(huán)境(declsEnv)組合而成纲缓,它是雙環(huán)境組成的卷拘,統(tǒng)一交付一個(gè)環(huán)境存取的界面(objEnv/declsEnv 對(duì)應(yīng) Global/Script)。
let/const 聲明會(huì)放在declsEnv里面祝高,而var的變量會(huì)通過ObjEnv來聲明, 所以顯而易見說明栗弟,let,const 聲明的變量不在window對(duì)象
Q3: input 搜索如何防抖,如何處理中文輸入
<div>
<input type="text" id="ipt">
</div>
<script>
let ipt = document.getElementById('ipt');
let dbFun = debounce()
ipt.addEventListener('keyup', function (e) {
dbFun(e.target.value);
})
function debounce() {
let timer;
return function (value) {
clearTimeout(timer);
timer = setTimeout(() => {
console.log(value)
}, 500);
}
}
</script>
compositionstart & compositionend & compositionupdate做的中文輸入處理: 這3個(gè)方法是原生的方法工闺,這里簡單介紹下乍赫,官方定義如下compositionstart 事件觸發(fā)于一段文字的輸入之前(類似于 keydown 事件,但是該事件僅在若干可見字符的輸入之前陆蟆,而這些可見字符的輸入可能需要一連串的鍵盤操作雷厂、語音識(shí)別或者點(diǎn)擊輸入法的備選詞) 簡單來說就是切換中文輸入法時(shí)在打拼音時(shí)(此時(shí)input內(nèi)還沒有填入真正的內(nèi)容),會(huì)首先觸發(fā)compositionstart叠殷,然后每打一個(gè)拼音字母改鲫,觸發(fā)compositionupdate,最后將輸入好的中文填入input中時(shí)觸發(fā)compositionend。觸發(fā)compositionstart時(shí)钩杰,文本框會(huì)填入 “虛擬文本”(待確認(rèn)文本)纫塌,同時(shí)觸發(fā)input事件;在觸發(fā)compositionend時(shí)讲弄,就是填入實(shí)際內(nèi)容后(已確認(rèn)文本),所以這里如果不想觸發(fā)input事件的話就得設(shè)置一個(gè)bool變量來控制。