//待更新嫉嘀。。魄揉。
1.可以用typeof方法打印的類型:
答:1字符串string剪侮、2數(shù)字number、3布爾boolean洛退、4對象Object(數(shù)組array瓣俯,Null空值)、56Undefined未定義兵怯、6function彩匕。
---->基本數(shù)據(jù)類型
number,null媒区,string推掸,undefined,boolean
---->引用數(shù)據(jù)類型
指的是那些保存在堆內(nèi)存中的對象
2.undefined 和 null :
答:Undefined 這個值表示變量不含有值驻仅×鲁可以通過將變量的值設置為 null 來清空變量。
3.在數(shù)組的第一位插入,刪除元素:
答:shift(),unshift()
4:在數(shù)組的末尾插入刪除元素:
答:push(),pop()
5:在數(shù)組的中間插入刪除元素
答:splice(1,2,'替代')噪服,替代位置不填則僅刪除毡泻,填寫則替代
6:按順序?qū)懴律芷谒诘碾A段:
7:什么是高階組件并書寫一個高階組件:
答:high-order-component(高階組件)類似于高階函數(shù),即指接受React組件作為參數(shù)(重點),輸出一個新的組件的函數(shù),在這個函數(shù)中,我們可以修飾組件的props與state,所以在一些特定情況下高階組件可以讓我們的代碼看起來更優(yōu)美,更具有復用性
8:創(chuàng)建一個react組件是什么類型:
答:function類型
9:react組件引入后是什么類型:
答:實例化后為Object類型
10:說說PureComponent:
答:淺比較state與props,使得shouldComponentUpdate自動判斷是否重新渲染組件粘优。
注意點是當指向?qū)ο笠恢聲r仇味,及時對象內(nèi)部變化也不回渲染。
當需要組件重新渲染時雹顺,
let {items} = this.state
items.push('new-item')
this.setState({ items })
//結(jié)果不重新渲染
//需要寫成
let {items} = this.state
items.push('new-item')
this.setState({ items: [...items] })
11: 0.1 +0.2 !== 0.3 為什么
答:計算機為二進制算法丹墨。
0.1的二進制為0.0001100110011001100110011001100110011001100110011001101
0.2的二進制為0.001100110011001100110011001100110011001100110011001101
加起來為:0.010011001100110011001100110011001100110011001100110101化為十進制為0.30000000000000004
不相等
12:說說對原型鏈對理解:
13:
14:js中對繼承
-
類、繼承
js里的類 class 是屬于函數(shù)嬉愧,對象的模板typeof的結(jié)果回是function贩挣,
js的私有繼承:
來自網(wǎng)絡
//class類 extends 繼承 Component組件
class WaitContainer extends Component {
/*constructor會覆蓋父類的constructor,所以需要傳入props綁定没酣,否則無法使用super(name)王财,
super是代替的是父類的構(gòu)造函數(shù),
super(name)相當于sup.prototype.constructor.call(this, name)
*/
constructor(props) {
super(props)
//super關(guān)鍵字來實現(xiàn)對父類成員Component的訪問
}
}
- 閉包:
答:理解來說就是在一個房子里有許多的東西裕便,還有一個人绒净,這個人身上攜帶著房子里的東西。這個人在房子外和別人交流的時候就暴露了房子里的東西偿衰。大概挂疆。改览。em...就是這樣把,資料就泄漏了缤言。
- 線程
答:是程序執(zhí)行流的最小單元宝当,可并發(fā)執(zhí)行。
這里可以涉及到js是單線程卻可通過瀏覽器實現(xiàn)異步操作:
以下內(nèi)容來自網(wǎng)絡:
事件循環(huán):JS 會創(chuàng)建一個類似于 while (true) 的循環(huán)墨闲,每執(zhí)行一次循環(huán)體的過程稱之為 Tick。每次 Tick 的過程就是查看是否有待處理事件郑口,如果有則取出相關(guān)事件及回調(diào)函數(shù)放入執(zhí)行棧中由主線程執(zhí)行鸳碧。待處理的事件會存儲在一個任務隊列中,也就是每次 Tick 會查看任務隊列中是否有需要執(zhí)行的任務犬性。
任務隊列:異步操作會將相關(guān)回調(diào)添加到任務隊列中瞻离。而不同的異步操作添加到任務隊列的時機也不同,如 onclick, setTimeout, ajax 處理的方式都不同乒裆,這些異步操作是由瀏覽器內(nèi)核的 webcore 來執(zhí)行的套利,webcore 包含上圖中的3種 webAPI,分別是 DOM Binding鹤耍、network肉迫、timer模塊。
onclick 由瀏覽器內(nèi)核的 DOM Binding 模塊來處理稿黄,當事件觸發(fā)的時候喊衫,回調(diào)函數(shù)會立即添加到任務隊列中。
setTimeout 會由瀏覽器內(nèi)核的 timer 模塊來進行延時處理杆怕,當時間到達的時候族购,才會將回調(diào)函數(shù)添加到任務隊列中。
ajax 則會由瀏覽器內(nèi)核的 network 模塊來處理陵珍,在網(wǎng)絡請求完成返回之后寝杖,才將回調(diào)添加到任務隊列中。
主線程:JS 只有一個線程互纯,稱之為主線程瑟幕。而事件循環(huán)是主線程中執(zhí)行棧里的代碼執(zhí)行完畢之后,才開始執(zhí)行的留潦。所以收苏,主線程中要執(zhí)行的代碼時間過長,會阻塞事件循環(huán)的執(zhí)行愤兵,也就會阻塞異步操作的執(zhí)行鹿霸。只有當主線程中執(zhí)行棧為空的時候(即同步代碼執(zhí)行完后),才會進行事件循環(huán)來觀察要執(zhí)行的事件回調(diào)秆乳,當事件循環(huán)檢測到任務隊列中有事件就取出相關(guān)回調(diào)放入執(zhí)行棧中由主線程執(zhí)行懦鼠。
call:
//設計一下函數(shù)钻哩,輸出為“什么函數(shù)”:this指向的name
function ws() {this.name = 'ws';console.log('ws:',this.name)}
function ydd() {this.name = 'ydd';console.log('ydd:',this.name)}
//this轉(zhuǎn)換
ws.call(ydd,ws) //可視為ws函數(shù)中,用ydd替換ws
//輸出為 ws: ydd
ydd.call(ws,ws) //可視為ws函數(shù)中肛冶,用ydd替換ws
//輸出為 ydd: ws
apply: 指向改變同call
區(qū)別: