JS的ES6
1.let
let age = 12;
(1). 作用:
-
與var類似, 用於聲明一個變量
(2). 特點:
-
在塊作用域內有效
-
不能重復聲明
-
不會預處理, 不存在提升
(3). 應用:
-
循環遍歷加監聽
-
使用let取代var是趨勢
2.const
const sex = '男';
(1). 作用:
-
定義一個常量
(2). 特點:
-
不能修改
-
其它特點同let
(3). 應用:
-
保存不用改變的數據
3.解構賦值
(1)對象的解構賦值:從對象的屬性中取到想要的屬性值
1 let obj = {name : 'kobe', age : 39}; 2 //對象的解構賦值 3 let {name,age,xxx} = obj; //定義的變量要與屬性key相同,使用大括號{} 4 console.log(age,name,xxx); //39 "kobe" undefined
(2)數組的解構賦值
1 let arr = ['abc', 23, true]; 2 let [, b, c, d] = arr; //使用中括號[],可以使用占位空的,還是按順序獲得數組下標對應的值 3 console.log(b, c, d); //23 true undefined
用處:簡化傳參
1 let obj = {name : 'kobe', age : 39}; 2 3 function person1({name, age}) { 4 console.log(name, age); 5 } 6 person1(obj);
4.模版字符串
模板字符串必須用 `` 包含,變量用${xxx}
1 let obj = { 2 name : 'anverson', 3 age : 41 4 }; 5 console.log('我叫:' + obj.name + ', 我的年齡是:' + obj.age); //我叫:anverson, 我的年齡是:41 6 7 console.log(`我叫:${obj.name}, 我的年齡是:${obj.age}`); //我叫:anverson, 我的年齡是:41
5.簡寫的對象寫法:
-
省略同名的屬性
-
省略方法function以及前面的:
1 let x = 3; 2 let y = 5; 3 //普通額寫法 4 // let obj = { 5 // x : x, 6 // y : y, 7 // getPoint : function () { 8 // return this.x + this.y 9 // } 10 // }; 11 //簡化的寫法 12 let obj = { 13 x, //為外部的x 14 y, //為外部的y 15 getPoint(){ //省略:function 16 return this.x 17 } 18 }; 19 console.log(obj, obj.getPoint()); //Object 3
6.三點運算符
又稱:rest參數
作用:用來取代arguments 但比arguments靈活
限制:
-
只能是最后部分形參參數。
-
只能遍歷數組,不能遍歷對象。
1 //作為形參,是真實的數組可以遍歷 2 function fun(...values) { 3 console.log(arguments); 4 // arguments.forEach(function (item, index) { 5 // console.log(item, index); //報錯,arguments是偽數組不能遍歷 6 // }); 7 console.log(values); 8 values.forEach(function (item, index) { 9 console.log(item, index); 10 }) 11 } 12 fun(1,2,3); 13 14 //將一個數組插入到另一個數組 15 let arr = [2,3,4,5,6]; 16 let arr1 = ['abc',...arr, 'fg']; 17 console.log(arr1); //'abc' 2 3 4 5 6 'fg'
7.形參的默認值
作用:當不傳入參數的時候默認使用形參里的默認值
1 //定義一個點的坐標 2 function Point(x=12, y=12) { 3 this.x = x; 4 this.y = y; 5 } 6 let point = new Point(25, 36); 7 console.log(point); //25 36 8 let point2 = new Point(); 9 console.log(point2); // 12 12
8.箭頭函數
又稱:lambda表達式[和Java的差不多,但符號是=>]
1 //1.普通寫法 2 let fun = function () { 3 console.log('fun()'); 4 }; 5 fun(); 6 //2.沒有形參,並且函數體只有一條語句 7 let fun1 = () => console.log('fun1()'); 8 fun1(); 9 console.log(fun1()); 10 //3.一個形參,並且函數體只有一條語句 11 let fun2 = x => x; 12 console.log(fun2(5)); 13 //4.形參是一個以上 14 let fun3 = (x, y) => x + y; 15 console.log(fun3(25, 39)); //64 16 17 //5.函數體有多條語句 18 let fun4 = (x, y) => { 19 console.log(x, y); 20 return x + y; 21 }; 22 console.log(fun4(34, 48)); //82
特殊點在this:
箭頭函數的this看外層的是否有函數,
- 如果有,外層函數的this就是內部箭頭函數的this.
- 如果沒有,則this是window。
箭頭函數在定義時就確定了!!!使用call,apply,bind都不能綁定this。
一般函數得看誰調用他,this就是誰,可以使用call,apply,bind。
1 <button id="btn">測試箭頭函數this_1</button> 2 <button id="btn2">測試箭頭函數this_2</button>
1 setTimeout(() => { 2 console.log(this); //window 3 }, 1000) 4 5 let btn = document.getElementById('btn'); 6 //沒有箭頭函數 7 btn.onclick = function () { 8 console.log(this); //btn 9 }; 10 //箭頭函數 11 let btn2 = document.getElementById('btn2'); 12 13 let obj = { 14 name: 'kobe', 15 age: 39, 16 getName: () => { 17 btn2.onclick = () => { 18 console.log(this); 19 }; 20 } 21 }; 22 obj.getName(); //window 23 24 25 function Person() { 26 this.obj = { 27 showThis: () => { 28 console.log(this); 29 } 30 } 31 } 32 let fun5 = new Person(); 33 fun5.obj.showThis(); //Person
1 var name = "windowname"; 2 var oo = { 3 name:"outname", 4 ll :{ 5 inname : "inname", 6 f : () => console.log(this), 7 ff(){ 8 console.log(this); 9 } 10 } 11 } 12 13 var obj4 = { 14 name : "name" 15 } 16 17 oo.ll.f(); //window 18 oo.ll.ff(); //調用它的ll ==> Object {inname: "inname"} 19 oo.ll.ff.call(obj4); //obj4 ==>Object {name: "name"} 20 oo.ll.f.call(obj4); //綁定不了還是window
