盲點知識
redux 和mobx狀態管理庫的區別
- mobx 使用的是 @inject 裝飾器語法注入,redux 使用的是 connect 語法注入
- mobx 使用 @observer 語法,讓一個 component 能響應 store 欄位更新
- mobx 會動態精確繫結資料欄位和對應 component 關係, redux 使用 connect 引數手動控制傳遞哪些欄位
- mobx 直接修改 store 的狀態,但是必須在 @action 修飾的函式中完成,@action 的語義,表示這是一個修改狀態的操作
- redux Provider 傳遞 store 是強約定,mobx Provider 靈活傳遞 store actions,也可以是其它名字,比如 db
- redux 使用了比較難以理解的高階函式和引數 connect combineReducers bindActionCreators mapStateToProps mapDispatchToProps ,mobx 方案,除了使用 decorator 語法,沒有其它讓人感覺理解困難的函式。 7.redux 引入了資料流,mobx 沒有資料流的概念,通過 actions 直接改變資料
Fetch實現請求
Fetch和ajax的不同
- 當接收到一個代表錯誤的 HTTP 狀態碼時,從 fetch()返回的 Promise 不會被標記為 reject, 即使該 HTTP 響應的狀態碼是 404 或 500。相反,它會將 Promise 狀態標記為 resolve (但是會將 resolve 的返回值的 ok 屬性設定為 false ),僅當網路故障時或請求被阻止時,才會標記為 reject。
- 預設情況下,fetch 不會從服務端傳送或接收任何 cookies, 如果站點依賴於使用者 session,則會導致未經認證的請求(要傳送 cookies,必須設定 credentials 選項)。
OPTIONS請求方法的主要用途有兩個:
-
獲取伺服器支援的HTTP請求方法;
-
用來檢查伺服器的效能。
js基礎知識
toLocaleTimeString()根據本地時間把Date物件的時間轉換為字串
var d=new Date()
var n=d.toLocaleTimeString() //輸出"2019/2/26"
複製程式碼
ES6 知識
async/await
async關鍵字表示該函式內部有非同步,async函式返回一個Promise物件,可以使用then方法新增回撥,遇到await就返回,等到非同步操作完成,再接著執行函式體後面的語句。
async使用形式
// 函式申明
async function foo(){}
// 函式表示式
const foo=async foo(){}
// 物件形式
let obj={async foo(){}}
obj.foo().then()
// 箭頭函式
const foo=async () => {}
複製程式碼
使用注意點
- await命令最好放在try...catch程式碼塊中,或者await後面跟一個catch方法
- await命令只能用在async函式之中,如果用在普通函式,就會報錯
- 多個await命令後面的非同步操作,如果不存在繼發關係,最好讓它們同時觸發
Set和Map資料結構
Set
- 用法,set本身是一個建構函式,用來生成Set資料結構
const set=new Set([1,1,2,2,3,3])
[...set] // [1,2,3]
const item=new Set([1,2,3,3,3,3])
item.size //3
複製程式碼
實際應用
//去除陣列的重複成員
[...new Set(array)]
//去除字串中的重複位元組
[...new Set('abbbcccc')].join() //abc
//Array.from方法可以將 Set 結構轉為陣列
const items = new Set([1, 2, 3, 4, 5]);
const array = Array.from(items);
複製程式碼
set和map例項屬性和方法
- 遍歷操作,set預設遍歷操作是values,map預設遍歷操作是entries
- keys() 返回鍵名
- values() 返回鍵值
- entries() 返回鍵值對
- forEach() 使用回撥函式遍歷每一個成員
Set/Map/Array/Object使用場景
Array和Set對比
- Set沒有重複值
- Set通過delete刪除,Array通過splice
- Set沒有Array的Map/filter/some/every等新方法
- Array的indexof沒有Set的has()方法效率高
Object和Map對比
- Object的鍵是string,Map的鍵可以是任意型別
- Object的尺寸需要手動計算,而Map.size可以獲取尺寸
for...of迴圈
-
一個資料結構只要部署了Symbol.iterator屬性,就被視為具有 iterator 介面,就可以用for...of迴圈遍歷它的成員。也就是說,for...of迴圈內部呼叫的是資料結構的Symbol.iterator方法。
-
for...of迴圈可以使用的範圍包括陣列、Set 和 Map 結構、某些類似陣列的物件(比如arguments物件、DOM NodeList 物件)、後文的 Generator 物件,以及字串
for..of 和for...in的區別
- for...in只能獲取物件的鍵名,不能直接讀取物件的鍵值,for...of允許直接獲取物件的鍵值
var arr=['a','b','c']
for(let a in arr){
console.log(a) //0 1 2
}
for(let a of arr){
console.log(a) // a b c
}
複製程式碼
- 普通的物件,for...in迴圈可以遍歷鍵名,for...of迴圈會報錯
//Object.keys方法將物件的鍵名生成一個陣列,然後遍歷這個陣列
for (var key of Object.keys(someObject)) {
console.log(key + ': ' + someObject[key]);
}
複製程式碼
for..of 和其他語法的比較
//for迴圈,比較麻煩
for (var index = 0; index < myArray.length; index++) {
console.log(myArray[index]);
}
//forEach迴圈,無法中途跳出forEach迴圈,break命令或return命令都不能奏效
myArray.forEach(function(value){
console.log(value)
})
//for...in,主要是為遍歷物件而設計的,不適用於遍歷陣列,只可遍歷陣列鍵值
for (var index in myArray) {
console.log(myArray[index]);
}
//for...of
for (let value of myArray) {
console.log(value);
}
複製程式碼