1.解構 在ES6中,可以使用解構從數組和對象提取值並賦值給獨特的變數,即將數組或對象中的值,拆成一個一個變數。 解構:自動解析數組或對象中的值,並賦值給指定的變數。、 1.1數組解構 1.2對象解構 將對象中的成員值,取出並賦值給多個變數(變數名與對象成員名一致) 1.3函數參數與解構 函數參數使 ...
1.解構
解構:自動解析數組或對象中的值,並賦值給指定的變數。、
1.1
var arr = [3,4,5]; var [a, b, c] = arr; console.log(a, b, c); //還可以忽略值 需要使用,占位 var arr = [3,4,5]; var [a,, c] = arr; console.log(a, c); //函數返回值為數組,進行解構 function f5(){ return [1,2,3]; } var [a, b, c] = f5(); console.log(a, b, c);
1.2
var person = { "nickname": "老三", "age": 30, "sex": "男" }; //解構時 {}中的變數名,不能加引號 var {nickname, age, sex} = person; console.log(nickname, age, sex); //可以忽略值 直接忽略 不需要占位 var {nickname, sex} = person; console.log(nickname, sex);
1.3
函數參數使用解構數組或解構對象形式
//1.函數形參,使用解構數組形式,調用函數時需要傳遞數組實參 function f1([x,y,z]){ console.log(x,y,z); } var arr = [1,2,3]; f1(arr); //相當於 /* function f1(a){ var [x,y,z] = a; console.log(x,y,z); } var arr = [1,2,3]; f1(arr); */ //2.函數形參,使用解構對象形式,調用函數時需要傳遞對象實參 function f2({nickname,age,sex}){ //變數名與對象成員名一致 console.log(nickname,age,sex); } var obj = {"nickname":"zhangsan", "age":40, "sex":"男"}; f2(obj); //相當於 /* function f1(a){ var {nickname, age, sex} = a; console.log(nickname,age,sex); } var obj = {"nickname":"zhangsan", "age":40, "sex":"男"}; f2(obj); */
1.4
<script> //1.函數參數使用解構數組,調用函數不傳參數會報錯 function fn([x, y, z]){ console.log(x, y, z); } fn(); //會報錯 </script> <script> //2.函數參數使用解構數組,對整個數組設置預設值為空數組 function f1([x, y, z] = []){ console.log(x, y, z); } f1(); //不報錯 x y z 都是 undefined //3.函數參數使用解構數組,對整個數組設置預設值,數組中每個變數對應一個預設值 function f2([x, y, z] = [1,2,3]){ console.log(x, y, z); } f2(); //不報錯 x=1 y=2 z=3 f2([4,5,6]); // x=4 y=5 z=6 //4.函數參數使用解構數組,對整個數組設置預設值為空數組, 在解構數組中對每個變數設置一個預設值 function f3([x=1, y=2, z=3]=[]){ console.log(x, y, z); } f3(); //不報錯 x=1 y=2 z=3 f3([4,5,6]); // x=4 y=5 z=6 </script>
1.5
<script> //1.函數參數使用解構對象,調用函數不傳參數會報錯 function fn({x, y, z}){ console.log(x, y, z); } fn(); //會報錯 </script> <script> //2.函數參數使用解構對象,對整個對象設置預設值為空對象 function f1({x, y, z} = {}){ console.log(x, y, z); } f1(); //不報錯 x y z 都是 undefined //3.函數參數使用解構對象,對整個對象設置預設值,對象中每個變數對應一個預設值 function f2({x, y, z} = {"x":1,"y":2,"z":3}){ console.log(x, y, z); } f2(); //不報錯 x=1 y=2 z=3 f2({"x":4,"y":5,"z":6}); // x=4 y=5 z=6 //4.函數參數使用解構對象,對整個對象設置預設值為空對象, 在解構對象中對每個變數設置一個預設值 function f3({x=1, y=2, z=3}={}){ console.log(x, y, z); } f3(); //不報錯 x=1 y=2 z=3 f3({"x":4,"y":5,"z":6}); // x=4 y=5 z=6 </script>
2.
ES6新增了一種數據類型:Symbol,表示獨一無二的值,Symbol最大的用途是用來定義對象的唯一屬性名
var symbol1 = Symbol(); var symbol2 = Symbol("Alice"); console.log(symbol1, symbol2) // 輸出:Symbol() Symbol(Alice)
Symbol類型的值是一個獨一無二的值,Symbol函數的參數只是表示對當前Symbol值的描述,因此相同參數的Symbol函數的返回值是不相等的。
var attr_name = Symbol(); var obj = { [attr_name]: "Alice" }; console.log(obj[attr_name]); var obj = { [Symbol()]:"Alice" }; console.log(obj);
使用[]方括弧,裡面的attr_name不帶引號,表示attr_name是一個變數.
3.
ES6可以使用“箭頭”(=>)定義函數,註意是普通函數,不要使用這種方式定義類(構造器)。
3.1
具有一個參數並直接返回的函數
var f1 = a=>a; //相當於 var f1 = function(a){ return a;}; console.log(f1('hello'));//'hello'
沒有參數的需要用在箭頭前加上小括弧
var f2 = () => '來了老弟'; console.log(f2());
多個參數需要用到小括弧,參數間逗號間隔
var f3 = (a, b) => a+b; console.log(f3(3,4));//7
函數體多條語句需要用到大括弧
var f4 = (a, b) => { console.log('來了老弟'); return a+b; } console.log(f4(5,6));//11
返回對象時需要用小括弧包起來,因為大括弧被占用解釋為代碼塊
var f5 = () => { return ({"name":"老弟", "age":40}); } //var f5 = () => ({"name":"老弟", "age":40}); console.log(f5());
直接作為事件處理函數
<input type="button" value="點擊" id="btn"> <script> document.getElementById('btn').onclick = evt=>{ console.log(evt);//evt 事件對象 } </script>
賦值為對象的方法
var obj = {}; obj.say = ()=>{return "hello,我是obj的say方法";} console.log(obj.say());
作為回調函數
var f6 = (f)=>{ console.log(f(100)); }; // f6(a=>a); var f7 = a=>a; f6(f7);
1.2
var f1 = a=>a; console.log(typeof f1);//'function'
instanceof判斷是否Function的實例,結果為true
var f1 = a=>a; console.log(f1 instanceof Function);//true
箭頭函數不綁定this, 內外this指向固定不變
var obj = { say:function(){ //非箭頭函數 var _this = this; var f1 = function(){ console.log(_this);//obj console.log(this);//window }; f1(); //箭頭函數 var f2 = ()=>{ console.log(this); }; f2(); } }; obj.say();
箭頭函數不能做構造函數,不能用new實例化,也沒有prototype屬性
var Person = ()=>{}; console.log(Person.prototype);//undefined var p = new Person();//報錯
不能使用arguments
var f1 = ()=>{ console.log(arguments); }; f1(); //報錯
箭頭函數也支持預設參數、剩餘參數、解構
var f1 = (x=1,y)=>{ console.log(x, y); //3 4 }; f1(3,4); var f2 = (...x)=>{ console.log(x); //[3,4] }; f2(3,4); var f3 = ([x,y]=[])=>{ console.log(x, y); //3 4 }; f3([3,4]);