1.js執(zhí)行機(jī)制
js它是一門單線程的編程語言,所有的任務(wù)需要排隊(duì)得以執(zhí)行,前一個任務(wù)未結(jié)束或者出錯,那么后面的任務(wù)均得不到執(zhí)行.如果前一個任務(wù)因?yàn)楹臅r太長,則影響后面的任務(wù)執(zhí)行,這樣使得JS執(zhí)行效率過低,所以JS異步模式產(chǎn)生坠韩。
2.js事件循環(huán)
1.0.當(dāng)JS代碼執(zhí)行時周崭,所有任務(wù)(同步/異步)都在主線程上執(zhí)行座舍,形成一個執(zhí)行棧虫给;
執(zhí)行棧之外有用于存儲待執(zhí)行異步回調(diào)的任務(wù)隊(duì)列(task queue) ===> 宏隊(duì)列與微隊(duì)列;
瀏覽器中有在其它分線程執(zhí)行相關(guān)管理模塊:定時器管理模塊喊巍,Ajax請求管理模塊咖刃,DOM事件管理模塊驶冒。若碰到這些任務(wù)源翠语,就會將其回調(diào)函數(shù)加入到宏隊(duì)列中;
若碰到微任務(wù)源再扭,例如Promise氧苍,則會將其回調(diào)函數(shù)加入到微隊(duì)列中;
直至script宏任務(wù)執(zhí)行結(jié)束后泛范,就會執(zhí)行微隊(duì)列中的任務(wù)让虐;
當(dāng)微隊(duì)列中的所有微任務(wù)執(zhí)行結(jié)束,就會檢查宏隊(duì)列中有沒有可執(zhí)行的宏任務(wù)罢荡。如果有赡突,則執(zhí)行該宏任務(wù)对扶,之后檢查微隊(duì)列并執(zhí)行微任務(wù),依次循環(huán)麸俘;反之辩稽,要是宏隊(duì)列中沒有待執(zhí)行任務(wù)惧笛,則循環(huán)結(jié)束从媚。
2.0. JavaScript的事件循環(huán)機(jī)制是基于宏任務(wù)和微任務(wù)。宏任務(wù)包括全局執(zhí)行棧中的同步代碼患整、setTimeout和setInterval的回調(diào)函數(shù)拜效,微任務(wù)包括Promise的回調(diào)函數(shù)、MutationObserver和queueMicrotask各谚。
事件循環(huán)的順序是:
1.執(zhí)行同步代碼(宏任務(wù))紧憾。
2.執(zhí)行執(zhí)行棧為空后,執(zhí)行微任務(wù)昌渤。
3.再次執(zhí)行同步代碼(宏任務(wù))赴穗。
重復(fù)步驟2和3,直到?jīng)]有微任務(wù)或者宏任務(wù)膀息。
3.js基本數(shù)據(jù)類型和引用數(shù)據(jù)類型的區(qū)別
1.基本數(shù)據(jù)類型(存放在棧中)
基本數(shù)據(jù)類型是指存放在棧中的簡單數(shù)據(jù)段般眉,數(shù)據(jù)大小確定,內(nèi)存空間大小可以分配潜支,它們是直接按值存放的甸赃,所以可以直接按值訪問
2.引用數(shù)據(jù)類型(存放在堆內(nèi)存中的對象,每個空間大小不一樣冗酿,要根據(jù)情況進(jìn)行特定的配置)
引用類型是存放在堆內(nèi)存中的對象埠对,變量其實(shí)是保存的在棧內(nèi)存中的一個指針(保存的是堆內(nèi)存中的引用地址),這個指針指向堆內(nèi)存裁替。
引用類型數(shù)據(jù)在棧內(nèi)存中保存的實(shí)際上是對象在堆內(nèi)存中的引用地址项玛。通過這個引用地址可以快速查找到保存中堆內(nèi)存中的對象
4.get請求和post請求區(qū)別
1、 get是從服務(wù)器上獲取數(shù)據(jù)弱判,post是向服務(wù)器傳送數(shù)據(jù)襟沮。
2、 url 可見性不同: get請求的參數(shù) url 可見裕循,而 post 請求的參數(shù) url 不可見臣嚣。 get請求時通過url直接請求數(shù)據(jù)并扇,數(shù)據(jù)信息可以在url中直接看到骗露,比如瀏覽器訪問;而post請求是放在請求頭中的噪裕,用戶無法直接看到株婴。
3怎虫、 get傳送的數(shù)據(jù)量較小暑认,有限制,不能大于2KB大审;這主要是因?yàn)樗芗s于url長度的限制蘸际。post傳送的數(shù)據(jù)量較大,一般被默認(rèn)為不受限制徒扶,但理論上粮彤,IIS4中最大量為80KB,IIS5中為100KB姜骡。
4导坟、get請求因?yàn)閿?shù)據(jù)參數(shù)是暴露在url中的,所以安全性比較低圈澈,如密碼不能暴露的就不能用get請求惫周;post請求中,請求信息是放在請求頭的康栈,安全性較高递递,可以使用。
5.組件卸載怎么阻止異步請求和異步事件
1.react取消請求
useEffect(() => {
let isUnmounted = false
(async () => { //異步請求
const res = await fetch(SOME_API)
const data = await res.json()
if (!isUnmounted) {
setValue(data.value)
setLoading(false)
}
})()
return () => {
isUnmounted = true;
}
}, [])
//
6.在請求攔截器/響應(yīng)攔截器一般做了哪些操作
1啥么、請求攔截器
請求攔截器的作用是在請求發(fā)送前進(jìn)行一些操作登舞,例如在每個請求體里加上token,統(tǒng)一做了處理如果以后要改也非常容易饥臂。
如axios逊躁,都只是對ajax進(jìn)行了統(tǒng)一的封裝,它暴露出來的攔截器隅熙,其實(shí)就是寫了一個方法稽煤,把a(bǔ)jax寫在這個方法里面,在執(zhí)行這個方法的時候囚戚,先將請求時要添加給請求頭的那些數(shù)據(jù)(token酵熙、后端要的加密碼…具體要看實(shí)際情況)先執(zhí)行一遍,都賦值給一個變量驰坊,然后再統(tǒng)一傳給ajax匾二,接下來就是執(zhí)行ajax,這就是所謂的請求攔截拳芙,其實(shí)就是先執(zhí)行要添加的數(shù)據(jù)察藐,然后再執(zhí)行ajax,如果把這個添加數(shù)據(jù)的過程抽出來舟扎,就成了所謂的請求攔截器分飞;
2、響應(yīng)攔截器:
響應(yīng)攔截器的作用是在接收到響應(yīng)后進(jìn)行一些操作睹限,例如在服務(wù)器返回登錄狀態(tài)失效譬猫,需要重新登錄的時候讯檐,跳轉(zhuǎn)到登錄頁。
響應(yīng)攔截器也是一樣如此染服,就是在請求結(jié)果返回后别洪,先不直接導(dǎo)出,而是先對響應(yīng)碼等等進(jìn)行處理柳刮,處理好后再導(dǎo)出給頁面挖垛,如果將這個對響應(yīng)碼的處理過程抽出來,就成了所謂的響應(yīng)攔截器诚亚;
3晕换、它們的共同點(diǎn)都是:都是提前做了一些操作午乓,可以作為程序優(yōu)化的一種處理方式站宗;
//
7.es6方法 Set和Map的區(qū)別
共同點(diǎn):
集合、字典 可以儲存不重復(fù)的值
區(qū)別:
1益愈、set指的是“集合”結(jié)構(gòu)梢灭,而map指的是“字典”結(jié)構(gòu);
2蒸其、set是以“[value, value]”的形式儲存元素敏释,而map是以“{key: value}”的形式儲存;
3摸袁、map可用get()通過鍵查找特定值并返回钥顽,而set不行。
集合(Set):
操作方法:
add(value):新增靠汁,相當(dāng)于 array里的push蜂大。
delete(value):存在即刪除集合中value。
has(value):判斷集合中是否存在 value蝶怔。
clear():清空集合奶浦。
遍歷方法:遍歷方法(遍歷順序?yàn)椴迦腠樞颍?/strong>
keys():返回一個包含集合中所有鍵的迭代器。
values():返回一個包含集合中所有值得迭代器踢星。
entries():返回一個包含Set對象中所有元素得鍵值對迭代器澳叉。
forEach(callbackFn, thisArg):用于對集合成員執(zhí)行callbackFn操作,如果提供了 thisArg 參數(shù)沐悦,回調(diào)中的this會是這個參數(shù)成洗,沒有返回值。
字典(Map):
操作方法:
set(key, value):向字典中添加新元素藏否。
get(key):通過鍵查找特定的數(shù)值并返回瓶殃。
has(key):判斷字典中是否存在鍵key。
delete(key):通過鍵 key 從字典中移除對應(yīng)的數(shù)據(jù)秕岛。
clear():將這個字典中的所有元素刪除碌燕。
遍歷方法:
Keys():將字典中包含的所有鍵名以迭代器形式返回误证。
values():將字典中包含的所有數(shù)值以迭代器形式返回。
entries():返回所有成員的迭代器修壕。
forEach():遍歷字典的所有成員愈捅。
//
8.對緩存的了解
1.Cookie(4kb)
Cookie的工作原理如下:
6.在請求攔截器/響應(yīng)攔截器一般做了哪些操作
>>>1、請求攔截器
請求攔截器的作用是在請求發(fā)送前進(jìn)行一些操作慈鸠,例如在每個請求體里加上token蓝谨,統(tǒng)一做了處理如果以后要改也非常容易。
如axios青团,都只是對ajax進(jìn)行了統(tǒng)一的封裝譬巫,它暴露出來的攔截器,其實(shí)就是寫了一個方法督笆,把a(bǔ)jax寫在這個方法里面芦昔,在執(zhí)行這個方法的時候,先將請求時要添加給請求頭的那些數(shù)據(jù)(token娃肿、后端要的加密碼…具體要看實(shí)際情況)先執(zhí)行一遍咕缎,都賦值給一個變量,然后再統(tǒng)一傳給ajax料扰,接下來就是執(zhí)行ajax凭豪,這就是所謂的請求攔截,其實(shí)就是先執(zhí)行要添加的數(shù)據(jù)晒杈,然后再執(zhí)行ajax嫂伞,如果把這個添加數(shù)據(jù)的過程抽出來,就成了所謂的請求攔截器拯钻;
2帖努、響應(yīng)攔截器:
響應(yīng)攔截器的作用是在接收到響應(yīng)后進(jìn)行一些操作,例如在服務(wù)器返回登錄狀態(tài)失效说庭,需要重新登錄的時候然磷,跳轉(zhuǎn)到登錄頁。
響應(yīng)攔截器也是一樣如此刊驴,就是在請求結(jié)果返回后姿搜,先不直接導(dǎo)出,而是先對響應(yīng)碼等等進(jìn)行處理捆憎,處理好后再導(dǎo)出給頁面舅柜,如果將這個對響應(yīng)碼的處理過程抽出來,就成了所謂的響應(yīng)攔截器躲惰;
3致份、它們的共同點(diǎn)都是:都是提前做了一些操作,可以作為程序優(yōu)化的一種處理方式础拨;
//
>>>
7.es6方法 Set和Map的區(qū)別
>>>共同點(diǎn):
集合氮块、字典 可以儲存不重復(fù)的值
區(qū)別:
1绍载、set指的是“集合”結(jié)構(gòu),而map指的是“字典”結(jié)構(gòu)滔蝉;
2击儡、set是以“[value, value]”的形式儲存元素,而map是以“{key: value}”的形式儲存蝠引;
3阳谍、map可用get()通過鍵查找特定值并返回,而set不行螃概。
集合(Set):
操作方法:
add(value):新增矫夯,相當(dāng)于 array里的push。
delete(value):存在即刪除集合中value吊洼。
has(value):判斷集合中是否存在 value训貌。
clear():清空集合。
遍歷方法:遍歷方法(遍歷順序?yàn)椴迦腠樞颍?/strong>
keys():返回一個包含集合中所有鍵的迭代器融蹂。
values():返回一個包含集合中所有值得迭代器旺订。
entries():返回一個包含Set對象中所有元素得鍵值對迭代器。
forEach(callbackFn, thisArg):用于對集合成員執(zhí)行callbackFn操作超燃,如果提供了 thisArg 參數(shù),回調(diào)中的this會是這個參數(shù)拘领,沒有返回值意乓。
字典(Map):
操作方法:
set(key, value):向字典中添加新元素。
get(key):通過鍵查找特定的數(shù)值并返回约素。
has(key):判斷字典中是否存在鍵key届良。
delete(key):通過鍵 key 從字典中移除對應(yīng)的數(shù)據(jù)。
clear():將這個字典中的所有元素刪除圣猎。
遍歷方法:
Keys():將字典中包含的所有鍵名以迭代器形式返回士葫。
values():將字典中包含的所有數(shù)值以迭代器形式返回。
entries():返回所有成員的迭代器送悔。
forEach():遍歷字典的所有成員慢显。
//
>>>
8.對緩存的了解
>>>1.Cookie(4kb)
Cookie的工作原理如下:
客戶端(瀏覽器)發(fā)送請求到服務(wù)器。
服務(wù)器在響應(yīng)中設(shè)置一個或多個Cookie欠啤,并將其發(fā)送到客戶端荚藻。
客戶端收到響應(yīng)后,將Cookie存儲在本地計(jì)算機(jī)上的Cookie文件中洁段。
客戶端在每次發(fā)送請求時应狱,都會將相應(yīng)的Cookie信息包含在請求頭中發(fā)送到服務(wù)器。
服務(wù)器接收到請求后祠丝,可以讀取請求頭中的Cookie信息疾呻,以獲取客戶端的狀態(tài)和其他相關(guān)信息除嘹。
Cookie可以在不同的HTTP請求之間存儲和傳遞數(shù)據(jù)。服務(wù)器可以使用Cookie來跟蹤用戶會話岸蜗、存儲用戶首選項(xiàng)憾赁、實(shí)現(xiàn)購物車功能等。
每個Cookie由一個名字(Name)和一個值(Value)組成散吵,還可以包含其他可選的屬性龙考,例如過期時間(Expires/Max-Age)、作用域(Domain/Path)矾睦、安全標(biāo)記(Secure/HttpOnly)等晦款。這些屬性可以控制Cookie的行為和可訪問性。
需要注意的是枚冗,Cookie是存儲在客戶端的文本文件缓溅,因此可以被篡改、竊取或?yàn)E用赁温。為了增強(qiáng)安全性坛怪,可以使用安全標(biāo)記和僅限HTTPS標(biāo)記來限制Cookie的傳輸和訪問。
2.web storage(localstorage,sessionstorage)5MB
//
9.vue和react的原理了解多少
vue[https://zhuanlan.zhihu.com/p/138114429]
10.call/apply/bind區(qū)別
1.call股囊、bind袜匿、apply 都是 JavaScript 中用于改變函數(shù)執(zhí)行上下文(即 this 指向)的方法。
2.call和bind 參數(shù)是列表稚疹,call會立即執(zhí)行居灯,bind不會
3.apply參數(shù)是數(shù)組,立即執(zhí)行
//
11.promise / async await 有什么關(guān)聯(lián)
Promise 和 async/await 是 JavaScript 中最常用的兩種異步編程方式内狗。Promise 通過使用 then() 和 catch() 方法來處理異步操作的結(jié)果怪嫌,而 async/await 通過使用 async 和 await 關(guān)鍵字來等待異步操作的結(jié)果。async/await 是建立在 Promise 之上的語法糖柳沙,它使得異步代碼更加易讀岩灭、易寫,同時也使得代碼結(jié)構(gòu)更加清晰赂鲤、易于維護(hù)噪径。在實(shí)際開發(fā)中,我們可以根據(jù)需要選擇合適的異步編程方式來處理異步操作蛤袒。
12.單點(diǎn)登陸的實(shí)現(xiàn)
單點(diǎn)登錄的關(guān)鍵在于熄云,如何讓 Session ID(或 Token)在多個域中共享。
1.將token存在父域cookie中子域驗(yàn)證cookie
2.認(rèn)證中心 網(wǎng)站跳轉(zhuǎn)將token攜帶到url中妙真,從url獲取token并驗(yàn)證登錄用戶
//
13.webpack常用的配置 優(yōu)化
14.git 常用工作流
15.怎么監(jiān)聽文件上傳下載的進(jìn)度
1.上傳
// 涉及函數(shù)onUploadProgress
// 形參: event
// 函數(shù)作用:請求接口上傳的過程中會不停的調(diào)用onUploadProgress函數(shù)
axiox({
url: 'api/XXX',
method: 'post',
onUploadProgress: function (e) {
console.log('e:',e);
}
})
在上傳的過程中缴允,會不停的多次的調(diào)用onUploadProgress函數(shù),
其中里面的total為本次上傳的總數(shù)據(jù)大小,loaded為本次上傳已上傳了多少數(shù)據(jù)练般。
2.下載
// 函數(shù) onDownLoadProgress
axiox({
url: 'api/XXX',
method: 'post',
onDowbloadProgress: function (e) {
console.log('e:',e);
}
})
其中l(wèi)oaded還是已經(jīng)下載了的數(shù)據(jù)大小矗漾,至于總數(shù)據(jù)大小,需要后端提供
16.vue怎么修改一個數(shù)組的長度
this.arr = [];
this.arr.splice(0);
//
17.平時喜歡使用函數(shù)組件還是類組件 為什么薄料?
函數(shù)式組件 基本上是JavaScript函數(shù)敞贡,接受props作為參數(shù)并返回要呈現(xiàn)的React元素。它們比類組件更簡單摄职,更簡潔誊役,更容易理解和測試。它們通常也更快速地進(jìn)行渲染谷市。
18.vue/react怎么緩存頁面
1.vue/(keep-alive)
include 字符串或正則表達(dá)式 只有名稱匹配的組件會被緩存蛔垢。
exclude 字符串或正則表達(dá)式 任何名稱匹配的組件都不會被緩存。
max 數(shù)字 最多可以緩存多少組件實(shí)例
//
19.首屏優(yōu)化方案有哪些
1.按需加載
2.骨架屏
3.圖片懶加載迫悠,預(yù)加載
4.cdn靜態(tài)資源加速
5.圖片壓縮
6.精靈圖
20.瀏覽器輸入url按下回車發(fā)生了什么
1.URL解析:瀏覽器會解析輸入的URL鹏漆,將其分解為不同的組成部分。例如協(xié)議(通常是HTTP或HTTPS)创泄,域名(例如www.example.com)艺玲,以及可選的端口號,路徑和查詢參數(shù)等鞠抑。
2.DNS解析:瀏覽器需要將域名解析為IP地址饭聚,以便能夠與服務(wù)器進(jìn)行通信。它會首先檢查瀏覽器緩存中是否有與該域名對應(yīng)的IP地址碍拆。如果沒有若治,則向DNS服務(wù)器發(fā)送查詢請求,以獲取該域名對應(yīng)的IP地址感混。一旦找到IP地址,瀏覽器就可以建立與服務(wù)器的連接礼烈。
3.建立連接:瀏覽器使用HTTP或HTTPS協(xié)議與服務(wù)器建立TCP連接弧满,以便在服務(wù)器和瀏覽器之間傳輸數(shù)據(jù)。這個過程會進(jìn)入一些握手和驗(yàn)證的步驟此熬,以確保連接的安全性和穩(wěn)定性庭呜。
4.發(fā)送HTTP請求:一旦連接建立好,瀏覽器會發(fā)送一個HTTP請求到指定的服務(wù)器犀忱。這個請求中包含了請求的方法(GET募谎,POST等),路徑阴汇,請求頭部和可選的請求體等信息数冬。
5.服務(wù)器處理請求:服務(wù)器收到瀏覽器發(fā)送的請求后,會根據(jù)請求中的信息來處理請求搀庶。服務(wù)器可能會執(zhí)行一些操作拐纱,例如查找請求的資源铜异,執(zhí)行服務(wù)器端的邏輯,查詢數(shù)據(jù)庫等秸架。
6.服務(wù)器響應(yīng):一旦服務(wù)器處理完請求揍庄,就會生成一個HTTP響應(yīng)并返回給瀏覽器。這個響應(yīng)中包含了響應(yīng)的狀態(tài)碼东抹,響應(yīng)頭部和響應(yīng)體等信息蚂子。常見的狀態(tài)碼有200表示成功,404表示資源未找到缭黔,500表示服務(wù)器內(nèi)部錯誤等食茎。
7.接收和渲染頁面:瀏覽器接收到服務(wù)器返回的響應(yīng)后,會根據(jù)響應(yīng)的內(nèi)容進(jìn)行解析和渲染试浙。如果響應(yīng)是一個HTML頁面董瞻,瀏覽器會解析HTML,CSS和JavaScript田巴,并將其渲染成可視化的頁面钠糊。同時,瀏覽器還會發(fā)送其他的請求來獲取頁面中引用的其他資源壹哺,例如圖片抄伍,樣式表,JavaScript文件等管宵。
8.關(guān)閉連接:一旦瀏覽器完成對頁面的渲染截珍,它會關(guān)閉與服務(wù)器的連接,釋放網(wǎng)絡(luò)資源箩朴。
21.動態(tài)路由的實(shí)現(xiàn)(怎么控制路由權(quán)限的)
route = [
{
meta: {permissionCode: 10023}
}
]
22.接口返回的狀態(tài)碼有哪些岗喉,都代表什么含義?
//
1炸庞、200 OK:客戶端請求成功钱床,表示請求已成功,請求所希望的響應(yīng)頭或數(shù)據(jù)體將隨此響應(yīng)返回埠居。
2查牌、302 (臨時重定向) : 表示請求的資源臨時搬到了其他位置請求的資源暫時被配到到了新的URI。
3滥壕、304 (未修改) : 表示客戶端發(fā)送附帶條件的請求(GET方法請求報(bào)文中的IF…)時纸颜,條件不滿足返回304時,不包含任何響應(yīng)主體
4绎橘、400 Bad Request:客戶端請求有語法錯誤胁孙,不能被服務(wù)器所理解。
5、401 Unauthorized:請求未經(jīng)授權(quán)浊洞,請求要求身份驗(yàn)證牵敷。對于需要登錄的網(wǎng)頁,服務(wù)器可能返回此響應(yīng)法希。
6枷餐、403 Forbidden:服務(wù)器收到請求,但是拒絕提供服務(wù)苫亦。
7毛肋、404 Not Found:請求資源不存在,服務(wù)器無法根據(jù)客戶端的請求找到資源屋剑,前端調(diào)用的URL不存在润匙。
8、500 Internal Server Error:服務(wù)器發(fā)生不可預(yù)期的錯誤唉匾,一般來說孕讳,這個問題都會在服務(wù)器程序出錯時出現(xiàn),即后端問題巍膘。
9厂财、502 bad gateway:錯誤網(wǎng)關(guān),由于連接超時峡懈,向服務(wù)器發(fā)送請求璃饱,由于服務(wù)器當(dāng)前鏈接太多,導(dǎo)致服務(wù)器方面無法給出正常的響應(yīng)肪康。
10荚恶、503 Server Unavailable:服務(wù)器當(dāng)前不能處理客戶端的請求,一段時間后可能恢復(fù)正常磷支。
11谒撼、504 :網(wǎng)關(guān)超時,服務(wù)器作為網(wǎng)關(guān)或代理雾狈,未及時從上游服務(wù)器接收請求嗤栓。
12、405: 請求方式錯誤
23.項(xiàng)目上遇到最難的問題箍邮,舉例說明一下
24.eslint使用過嗎,都用過什么配置
25.除了npm還使用過哪些下載包的工具
1.cnpm yarn pnpm
26.談?wù)剉ue的v-model數(shù)據(jù)雙向綁定怎么實(shí)現(xiàn)的
v-model是v-bind:value和v-on:input的語法糖
input的值改變賦值給value叨叙,value的值改變锭弊,input輸入框的值也隨之改變,從而實(shí)現(xiàn)數(shù)據(jù)雙向綁定
//
27.vue的傳參方式有哪些
1擂错、父子組件間利用“props”和“$emit”進(jìn)行傳參味滞;2、爺孫組件間利用“provide”和“inject”進(jìn)行傳參;3剑鞍、兄弟組件間利用公共文件來傳參昨凡;4、路由間使用“query”和“params”來傳參蚁署。
28.對vue響應(yīng)式原理的理解
29.v-if和v-show的區(qū)別便脊,使用場景分別是什么
30.nextTick的作用和使用場景?
$nextTick是用來知道什么時候DOM更新完成的光戈。
31.let哪痰、var、const區(qū)別
//
一久妆、let晌杰、var、const區(qū)別
(1)塊級作用域:
塊作用域由 { }包括筷弦,let和const具有塊級作用域肋演,var不存在塊級作用域。塊級作用域解決了ES5中的兩個問題:
<> 內(nèi)層變量可能覆蓋外層變量
<> 用來計(jì)數(shù)的循環(huán)變量泄露為全局變量
(2)變量提升: var存在變量提升烂琴,let和const不存在變量提升爹殊,即在變量只能在聲明之后使用,否在會報(bào)錯监右。
(3)給全局添加屬性: 瀏覽器的全局對象是window边灭,Node的全局對象是global。var聲明的變量為全局變量健盒,并且會將該變量添加為全局對象的屬性绒瘦,但是let和const不會。
(4)重復(fù)聲明: var聲明變量時扣癣,可以重復(fù)聲明變量惰帽,后聲明的同名變量會覆蓋之前聲明的遍歷。const和let不允許重復(fù)聲明變量父虑。
(5)暫時性死區(qū): 在使用let该酗、const命令聲明變量之前,該變量都是不可用的士嚎。這在語法上呜魄,稱為暫時性死區(qū)。使用var聲明的變量不存在暫時性死區(qū)莱衩。
(6)初始值設(shè)置: 在變量聲明時爵嗅,var 和 let 可以不用設(shè)置初始值。而const聲明變量必須設(shè)置初始值笨蚁。
(7)指針指向: let和const都是ES6新增的用于創(chuàng)建變量的語法睹晒。 let創(chuàng)建的變量是可以更改指針指向(可以重新賦值)趟庄。但const聲明的變量是不允許改變指針的指向。
二伪很、const對象的屬性可以修改嗎
const保證的并不是變量的值不能改動戚啥,而是變量指向的那個內(nèi)存地址不能改動。對于基本類型的數(shù)據(jù)(數(shù)值锉试、字符串猫十、布爾值),其值就保存在變量指向的那個內(nèi)存地址键痛,因此等同于常量炫彩。
但對于引用類型的數(shù)據(jù)(主要是對象和數(shù)組)來說,變量指向數(shù)據(jù)的內(nèi)存地址絮短,保存的只是一個指針江兢,const只能保證這個指針是固定不變的,至于它指向的數(shù)據(jù)結(jié)構(gòu)是不是可變的丁频,就完全不能控制了杉允。
32.實(shí)現(xiàn)對象深拷貝的方法,JSON.stringify() 有什么缺點(diǎn)
1席里、JSON.stringify(obj);//將對象轉(zhuǎn)換為json字符串形式
2叔磷、lodash.cloneDeep()實(shí)現(xiàn)深拷貝
3、遞歸實(shí)現(xiàn) (推薦使用)
//使用遞歸的方式實(shí)現(xiàn)數(shù)組奖磁、對象的深拷貝
export function deepClone (obj) {
let objClone = Array.isArray(obj) ? [] : {};
if (obj && typeof obj === "object") {
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
//判斷ojb子元素是否為對象改基,如果是,遞歸復(fù)制
if (obj[key] && typeof obj[key] === "object") {
objClone[key] = deepClone(obj[key]);
} else {
//如果不是咖为,簡單復(fù)制
objClone[key] = obj[key];
}
}
}
}
return objClone;
};
33.檢測數(shù)據(jù)類型的方式
// 判斷是否為undefined或null
const isDef = (v) => {
return v !== undefined && v !== null
}
// 判斷是否為Promise 函數(shù)
const isPromise = (val) => {
return (
val !== undefine &&
typeof val.then === 'function' &&
typeof val.catch === 'function'
)
}
// 判斷是否為簡單數(shù)據(jù)類型
const isPrimitive (value) => {
return (
typeof value === 'string' ||
typeof value === 'number' ||
typeof value === 'symbol' ||
typeof value === 'boolean'
)
}
// 嚴(yán)格檢查復(fù)雜數(shù)據(jù)類型
const isPlainObject = (obj) => {
return Object.prototype.toString.call(obj) === '[object Object]'
}
const isRegExp = (v) => {
return Object.prototype.toString.call(v) === '[object RegExp]'
}
34.HTTP/HTTPS協(xié)議
1.HTTP
超文本傳輸協(xié)議秕狰,是一個基于請求與響應(yīng),無狀態(tài)的躁染,應(yīng)用層的協(xié)議鸣哀,常基于TCP/IP協(xié)議傳輸數(shù)據(jù)吞彤,互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議,所有的WWW文件都必須遵守這個標(biāo)準(zhǔn)我衬。設(shè)計(jì)HTTP的初衷是為了提供一種發(fā)布和接收HTML頁面的方法。
1.1.HTTP特點(diǎn)
1.無狀態(tài):協(xié)議對客戶端沒有狀態(tài)存儲饰恕,對事物處理沒有“記憶”能力挠羔,比如訪問一個網(wǎng)站需要反復(fù)進(jìn)行登錄操作
2.無連接:HTTP/1.1之前,由于無狀態(tài)特點(diǎn)埋嵌,每次請求需要通過TCP三次握手四次揮手褥赊,和服務(wù)器重新建立連接。比如某個客戶機(jī)在短時間多次請求同一個資源莉恼,服務(wù)器并不能區(qū)別是否已經(jīng)響應(yīng)過用戶的請求拌喉,所以每次需要重新響應(yīng)請求,需要耗費(fèi)不必要的時間和流量俐银。
3.基于請求和響應(yīng):基本的特性尿背,由客戶端發(fā)起請求,服務(wù)端響應(yīng) 簡單快速捶惜、靈活
4.通信使用明文田藐、請求和響應(yīng)不會對通信方進(jìn)行確認(rèn)、無法保護(hù)數(shù)據(jù)的完整性
2.HTTPS
HTTPS是身披SSL外殼的HTTP吱七。
HTTPS是一種通過計(jì)算機(jī)網(wǎng)絡(luò)進(jìn)行安全通信的傳輸協(xié)議汽久,經(jīng)由HTTP進(jìn)行通信,利用SSL/TLS建立全信道踊餐,加密數(shù)據(jù)包景醇。HTTPS使用的主要目的是提供對網(wǎng)站服務(wù)器的身份認(rèn)證,同時保護(hù)交換數(shù)據(jù)的隱私與完整性吝岭。
2.2.HTTPS特點(diǎn)
1.內(nèi)容加密:采用混合加密技術(shù)三痰,中間者無法直接查看明文內(nèi)容
2.驗(yàn)證身份:通過證書認(rèn)證客戶端訪問的是自己的服務(wù)器
3.保護(hù)數(shù)據(jù)完整性:防止傳輸?shù)膬?nèi)容被中間人冒充或者篡改
35.vue路由傳參params和query的區(qū)別
// 1.params傳參:
//**1.1**
this.$router.push({
name:'about', //組件名
params: {id:'1'} //傳遞的參數(shù) {key:value,key:value}
})
// 這種方式參數(shù)在url中看不到刷新頁面參數(shù)會丟失
//**1.2**
{
path: "/about/:id",
name: "about",
component: () => import("../views/about/about.vue"),
},
// 在路由中配置參數(shù)顯示在url中參數(shù)不會丟失
// 獲取參數(shù):this.$route.params
//2.query傳參:
this.$router.push({
path:'/about',
// name:'about',
query:{id:1}
})
// 參數(shù)在url中顯示參數(shù)不會丟失
// 獲取參數(shù): this.$route.query
36.vue題集[https://zhuanlan.zhihu.com/p/644543319
]