1. ES6基礎
- 語言特性:
- const, let:const為常量,一旦定義不可修改。let為塊級作用域變量。
- 函數:
- 箭頭函數:語法糖,為匿名函數。
- this在箭頭函數中的使用:
js對象中的嵌套函數this會指向global對象:
解決方案:1.為this賦值, 2.使用bind綁定上下文var val = "global"; var obj = { val: "locale", getVal: function() { return function() { console.log(this.val); } } } obj.getVal()() //輸出"global"
// 定義時將this值賦值給變量 var val = "global"; var obj = { val: "locale", getVal: function() { var self = this; return function() { console.log(self.val); } } } obj.getVal()() //輸出"locale"
解決方案3:使用箭頭函數// 使用bind綁定上下文obj var val = "global"; var obj = { val: "locale", getVal: function() { return function() { console.log(this.val); }.bind(this); } } obj.getVal()() //輸出"locale"
var val = "global"; var obj = { val: "locale", getVal: function() { return () => { console.log(this.val); } } } obj.getVal()() //輸出"locale"
- 函數默認參數:
ES6前默認參數需要額外指定,例如:values = values || [];
ES6指定函數默認參數:function whatsUp(name = 'Love Me Like You Do', type = 'english') { console.log("I'm listening an " + type + " song: " + name + ", right now."); } whatsUp();
- Rest參數:函數最后一個參數前帶有
...
,則該參數會轉換為數組。
注意:Rest參數是數組,arguments只是類數組對象。Rest參數可使用數組方法,例:sort、map等。盡量使用Rest參數替代arguments。function restFun(name, ...args) { console.log("list " + name + ": " + args); } restFun();
- 展開操作符:
...
即展開操作符,允許一個表達式展開。- 用于函數調用:將數組依次作為參數進行調用。
ES6前使用apply
ES6使用展開操作符function test(gender, name) { console.log((gender === "female" ? "Her" : "His") + " name is "+ name); } test.apply(null, ["female", "Elizabeth"]); //Her name is Elizabeth
test(...["female", "Elizabeth"]); //Her name is Elizabeth
- 用于數組字面量:數組展開
var arr1 = [1,2,3], arr2 = ["lisa", "tom"] var arr3 = [...arr1, ...arr2]; //[1,2,3,"lisa","tom]
- 用于對象展開
var teecha = {age: 23, gender: "male"} teecha = {...teecha, nickname: "sweettea"} // {age: 23, gender: "male", nickname: "sweettea"}
- 用于函數調用:將數組依次作為參數進行調用。
- 模板字符串:使用
`
字符。var song = "紅塵"; var tpl = `${song} is one of my favorite songs, do you wanna try? `; console.log(tpl);
to be continue...