Promise對象
1. 理解:
* Promise對象: 代表了未來某個將要發生的事件(通常是一個異步操作)
* 有了promise對象, 可以將異步操作以同步的流程表達出來, 避免了層層嵌套的回調函數(俗稱'回調地獄')
* ES6的Promise是一個構造函數, 用來生成promise對象的實例
2. 使用promise基本步驟(2步):
* 創建promise對象
let promise = new Promise((resolve, reject) => {
? ? //初始化promise狀態為 pending
? //執行異步操作
? if(異步操作成功) {
? ? resolve(value);//修改promise的狀態為fullfilled
? } else {
? ? reject(errMsg);//修改promise的狀態為rejected
? }
})
* 調用promise的then()
promise.then(function(
? result => console.log(result),
? errorMsg => alert(errorMsg)
))
3. promise對象的3個狀態
* pending: 初始化狀態
* fullfilled: 成功狀態
* rejected: 失敗狀態
4. 應用:
* 使用promise實現超時處理
* 使用promise封裝處理ajax請求
let request = new XMLHttpRequest();
request.onreadystatechange = function () {
}
request.responseType = 'json';
request.open("GET", url);
request.send();
5. promise過程分析:
class
1. 通過class定義類/實現類的繼承
2. 在類中通過constructor定義構造方法
3. 通過new來創建類的實例
4. 通過extends來實現類的繼承
5. 通過super調用父類的構造方法
6. 重寫從父類中繼承的一般方法
字符串擴展
1. includes(str) : 判斷是否包含指定的字符串
2. startsWith(str) : 判斷是否以指定字符串開頭
3. endsWith(str) : 判斷是否以指定字符串結尾
4. repeat(count) : 重復指定次數
數值擴展
1. 二進制與八進制數值表示法: 二進制用0b, 八進制用0o
2. Number.isFinite(i) : 判斷是否是有限大的數
3. Number.isNaN(i) : 判斷是否是NaN
4. Number.isInteger(i) : 判斷是否是整數
5. Number.parseInt(str) : 將字符串轉換為對應的數值
6. Math.trunc(i) : 直接去除小數部分
數組擴展
1. Array.from(v) : 將偽數組對象或可遍歷對象轉換為真數組
2. Array.of(v1, v2, v3) : 將一系列值轉換成數組
3. find(function(value, index, arr){return true}) : 找出第一個滿足條件返回true的元素
4. findIndex(function(value, index, arr){return true}) : 找出第一個滿足條件返回true的元素下標
對象擴展
1. Object.is(v1, v2)
* 判斷2個數據是否完全相等
2. Object.assign(target, source1, source2..)
* 將源對象的屬性復制到目標對象上
3. 直接操作 __proto__ 屬性
let obj2 = {};
obj2.__proto__ = obj1;
深度克隆
1、數據類型:
* 數據分為基本的數據類型(String, Number, boolean, Null, Undefined)和對象數據類型
- 基本數據類型特點: 存儲的是該對象的實際數據
- 對象數據類型特點: 存儲的是該對象在棧中引用,真實的數據存放在堆內存里
2、復制數據
- 基本數據類型存放的就是實際的數據,可直接復制
let number2 = 2;
let number1 = number2;
- 克隆數據:對象/數組
1、區別: 淺拷貝/深度拷貝
判斷: 拷貝是否產生了新的數據還是拷貝的是數據的引用
知識點:對象數據存放的是對象在棧內存的引用,直接復制的是對象的引用
let obj = {username: 'kobe'}
let obj1 = obj; // obj1 復制了obj在棧內存的引用
2、常用的拷貝技術
1). arr.concat(): 數組淺拷貝
2). arr.slice(): 數組淺拷貝
3). JSON.parse(JSON.stringify(arr/obj)): 數組或對象深拷貝, 但不能處理函數數據
4). 淺拷貝包含函數數據的對象/數組
5). 深拷貝包含函數數據的對象/數組
Set和Map數據結構
1. Set容器 : 無序不可重復的多個value的集合體
* Set()
* Set(array)
* add(value)
* delete(value)
* has(value)
* clear()
* size
2. Map容器 : 無序的 key不重復的多個key-value的集合體
* Map()
* Map(array)
* set(key, value)//添加
* get(key)
* delete(key)
* has(key)
* clear()
* size
for_of循環
for(let value of target){}循環遍歷
1. 遍歷數組
2. 遍歷Set
3. 遍歷Map
4. 遍歷字符串
5. 遍歷偽數組
ES7
1. 指數運算符(冪): **
2. Array.prototype.includes(value) : 判斷數組中是否包含指定value
Vue 的基本認識
介紹描述
1)漸進式 JavaScript 框架
2)作者: 尤雨溪(一位華裔前 Google 工程師)
3)作用: 動態構建用戶界面
?Vue 的特點
1)遵循 MVVM 模式
2)編碼簡潔, 體積小, 運行效率高, 適合移動/PC 端開發
3)它本身只關注 UI, 可以輕松引入 vue 插件或其它第三方庫開發項目
1.1.4. 與其它前端 JS 框架的關聯
1)借鑒 angular 的模板和數據綁定技術
2)借鑒 react 的組件化和虛擬 DOM 技術
Vue 擴展插件
1)vue-cli: vue 腳手架
2)vue-resource(axios): ajax 請求
3)vue-router: 路由
4)vuex: 狀態管理
5)vue-lazyload: 圖片懶加載
6)vue-scroller: 頁面滑動相關
7)mint-ui: 基于 vue 的 UI 組件庫(移動端)
8)element-ui: 基于 vue 的 UI 組件庫(PC 端)
9)它本身只關注 UI, 可以輕松引入 vue 插件或其它第三方庫開發項目