這篇文章主要因為只是個人對ES6的不完整的理解,寫的不是很生動,如果有比較瞭解的歡迎糾錯。
1.箭頭函式
省略 function 省略return;
原來的
function (){
retrun...
}
變成
() = >
2.const 和 let
const過程大概為檢測 命名是否記憶體中存在? 報錯 :命名 ;
命名過程中,如果函式出錯,命名依舊佔過去,不能再重新給函式定義這個命名。
var x;
const x = () => {...}//報錯,命名已經存在
const y = () => {console.log(1)//報錯,miss },定義函式失敗
const y = () => {console.log(1)}//報錯,命名已存在
let作用於塊級作用域,從我膚淺的理解角度,就類似個閉包的引數。所以沒法再同一作用域用let定義同一個引數。閉包引數有個特色,對外為變數,為內為常量。
let x = 1;
let x = 2;//報錯,x已經被宣告。
function test(){let x = 3};//不報錯
for(var i = 0;i < 5;i++){
setTimeout(() => {console.log(i)},1000)
}// 5 5 5 5 5
for(let i = 0;i < 5;i++){
setTimeout(() => {console.log(i)},1000)
}// 0 1 2 3 4
這實際等於
var n = (t) =>{setTimeout(() => {console.log(t)},1000)}
for(var i = 0;i < 5;i++){
n(i);
}
3.promises
非同步處理功能
定義一個函式為new Promise(),Promises裡面有倆個引數物件,resolve //成功,reject //失敗,這倆個引數寫在函式的最後面,表示這個函式是不是執行成功了。
resolve和reject可以帶入自己的引數。
.then()可以無限鏈下去。我個人覺得這個可以封裝一個方法。
var con1 = new Promise(function(resolve,reject){
setTimeout(() => {console.log(1);true?resolve(`成功`):reject(`失敗`)},1000)
})
var con2 = (t) => {setTimeout(() => {console.log(t)},1000)};
con1.then((resolve的引數) => {con2(resolve的引數)},(reject的引數) => {con2(reject的引數)})
4.class
class應該是涉及到了原型鏈,原型鏈就是一個函式的原型函式,區別於建構函式。主要用於繼承。
我理解的繼承的意義就是提高程式碼複用率。
class test1{
testOne(){console.log(`this is test1.testOne`)}
}
class test2 extends test1{
testTwo(){console.log(`this is test2.testTwo`)}
}
var test3 = new test2();
test3.testOne();//this is test1.testOne
test3.testTwo();//this is test1.testTwo
5.陣列合並rest
rest的寫法就是…
var testRest = (...x) => {console.log(x)};
tesrRest(1,2,3)//[1,2,3]
const a = [1,2,3];
const b = [4,5,6];
const c = [...a,...b];//[1,2,3,4,5,6]
6.遍歷forEach
c.forEach(function(data){
console.log(data)
})//1 2 3 4 5 6
7.預設值
var z = undefined;
var x1 = z||`預設值z`;//預設值z
var y = `y`;
var x2 = y||`預設值y`;//y
var q = false;
var x3 = q||`預設值q`;//預設值q
var w = null;
var x4 = w||`預設值w`;//預設值w
var e = ``;
var x5 = e||`預設值e`;//預設值e
我覺得這裡面最沒怎麼踩懂的就是class 因為原型鏈還是沒有能完全弄懂 踩得最忐忑的就是 promise 因為這裡面的格式太侷限了,而且網上找的解釋很多不解釋reslove和reject的判斷條件