音訊連結:www.ximalaya.com/30018073/so…
沙翼老師一直是我比較關注和欣賞的業內大佬,他的節目深入淺出,對初學者大有裨益,對有一定基礎的前端從業者建立知識體系也有一定的幫助。本文整理比較倉促,肯定也會存在許多錯誤,只作本人複習之用,不喜勿噴。
1,js資料型別
簡單型別:布林 字串 數字 undifined null
複雜型別:object
2,如何判斷資料型別
簡單型別:用typeof判斷,typeof是一元運算子,可以不跟括號
但是 null和object返回的都是object
3,如何對物件型別進行判斷,尤其是陣列
兩種辦法:constructor和isArray
正確辦法:Object.protoType.tostring.call( arr )
4,陣列的方法
push pop shift unshift reverse concat slice splice index filter...
對原陣列有影響的:push pop shift unshift reverse sort splice
5,陣列如何去重
1-空陣列,迴圈push,indexof()判斷
2-splice,從原陣列上進行操作
3-根據物件屬性不能重複的特性
4-對原陣列進行排序,然後迴圈,相鄰的如果重複即刪除
5-最短的去重辦法:[…new Set( arr )]
var arr = [1,2,2,3,4] // 需要去重的陣列
var set = new Set(arr) // {1,2,3,4}
var newArr = Array.from(set) // 再把set轉變成array
console.log(newArr) // [1,2,3,4]
複製程式碼
6,偽陣列
1-dom選擇器選擇出的節點列表
2-arguments物件
3-jq選擇器選擇出的jq物件
轉換方式:新建陣列,將偽陣列依次push進去
7,字串
charAt concat...
8,數字
如何判斷是否 nan,最常見的方式 isNan
但是isNan是用來判斷傳進來的引數能否轉化為數字的,因此首先要判斷是否為數字
更好的判斷方式:用===和自身進行判斷,js中只有nan和自身是不全等的
9,布林
有哪些轉換成
undefine 0 -0 null false "" NAN
空物件和空陣列轉換成物件都是true,newBealean(false)為true
!!將資料快速轉化成布林型別
10,new做了什麼
1-建立空物件
2,修改this指標,將this指標指向建立的物件
3,執行建構函式中所有的程式碼
4,將建立的物件作為返回值返回
11,new如果沒有引數,可以不寫括號;如果在建構函式中顯式的返回了非物件,返回的依然是物件,如果顯式地返回了其它物件,則返回其它物件(單例模式瞭解一下)
12,繼承方式
1-原型鏈繼承 物件a,物件b
將b繼承於a,b.prototype=new a()
只能繼承原型物件上的屬性,這些屬性都是共享的,無法實現多繼承
2-建構函式式繼承
在b中將a的函式全部執行一遍
可以實現多繼承,但是隻能繼承建構函式裡的屬性
3-組合式繼承,也就是將原型鏈繼承和建構函式式繼承都寫一遍
開發中最常見的,程式碼執行兩遍,速度較慢
4-原型式繼承,
5-寄生式繼承
6-組合寄生式繼承(完美繼承)
13,<script></script>標籤
兩個特殊的屬性:defer async
defer延遲執行,同時並行載入多個js,然後按上下順序依次執行
async非同步載入,下載後立即執行,不一定按上下順序
1-js中,js程式碼會堵塞html css程式碼渲染
2,-正常js下載,都是同步依次下載,但是隻要寫了defer或者async都會改為非同步下載的方式,aynsc在外部js載入完成之後如果瀏覽器空閒,併發load事件觸發之前執行
defer在js載入完成之後,文件解析完成之後才會執行,也就是說,只要寫了defer,即使你把script標籤放在head裡,也類似於放在body最下面
14,promise中then和catch的返回值永遠是一個新的promise例項,如果顯式地返回一個非promise物件,後面的then和catch都會立即執行
15,es6新增
陣列方法,from
箭頭函式的變化:沒有arguments物件,this指向也發生了變化
16,js中的事件實現
1-dom嵌入,標籤裡寫onclick
2-事件繫結,獲得節點onclick,從html裡轉移到js裡,方便管理
3-事件監聽
瀏覽器相容性處理:ie是attachEvent和dettachEvent
17,js事件流
捕獲-目標-冒泡
18,target和currentTarget的區別
target是指目標節點
currentTarget當前物件的目標節點
<ul>
<li><span>hello 1</span></li>
<li><span>hello 1</span></li>
<li><span>hello 1</span></li>
<li><span>hello 1</span></li>
</ul>
<script>
let ul = document.querySelectorAll('ul')[0]
let aLi = document.querySelectorAll('li')
$('ul').on('click','li',function(e){
console.log(e.target) // 被點選的元素
console.log(e.currentTarget) // li
console.log(e.currentTarget === this) // true
})
</script>
複製程式碼
<ul>
<li>hello 1</li>
<li>hello 2</li>
<li>hello 3</li>
<li>hello 4</li>
</ul>
<script>
let ul = document.querySelectorAll('ul')[0]
let aLi = document.querySelectorAll('li')
for(let i=0;i<aLi.length;i++){
aLi[i].addEventListener('click',function(e){
let oLi1 = e.target
let oLi2 = e.currentTarget
console.log(oLi1) // li
console.log(oLi2) // li
console.og(oLi1===oLi2) // true
})
}
</script>複製程式碼
19,http的狀態碼
1-資訊響應
2-成功了
3-伺服器重定向響應,主要是為了滿足特定的
4-客戶端錯誤
5-服務端錯誤
20,敲下url後發生了什麼
瀏覽器查ip地址(dns解析,路由快取,瀏覽器快取)-瀏覽器發出http請求-伺服器重定向響應-瀏覽器跟蹤重定向響應,取得地址-伺服器接受請求,返回http響應,包括html等程式碼-瀏覽器按照自己的方式進行渲染
21,跨域
jsonp(json padding)是通過建立script標籤實現的
postMessage,最好轉成json字串發過去