基礎知識常被8:ES6中的相關語法(持續更新中)(超級詳細,一筆一筆親自打印上去的)


在2019年的8月的最後一天,有必要寫點總結的東西,所以今天就來講講ES6中的那點事兒。

let,const,var的對比:

let

1.使用let聲明得變量不能再次聲明

   let a = 5;
   let a = 6;
   console.log(a); 
   錯誤提示:Uncaught SyntaxError: Identifier 'a' has already been declared

2.具有塊級作用域

 {
   let a = 5;
   console.log(a);
 }
   console.log(a); //a is not defined

3.let沒有變量提升,必須要先定義在使用

   console.log(a);  //undefined
   var a = 5;

   console.log(a); //Cannot access 'a' before initialization
   let a = 5;

4.let的聲明不會像var聲明一樣作用到window中

   var abc = function(x, y) {
      return x + y;
   }
   console.log(abc(1,2));
   console.log(window) // 在這裏window中已經存在abc的屬性了,作用到了abc中


	let abc = function(x, y) {
      return x + y;
    }
    console.log(abc(1,2));
    console.log(window) // 因爲是let定義的函數,所以在window的屬性中就看不見abc的這個方法了

const

1.const 定義常量必須給初始值

	const a;
    console.log(a);//Missing initializer in const declaration

2.const 一但定義了就不能修改了

    const a = 5;
    const a = 10;
    console.log(a);Uncaught SyntaxError: Identifier 'a' has already been declared

3.具有塊級作用域(同let)

4.常量是獨立的,和window對象沒有關係(同let)

5.常量必須先定義再使用,沒有提升(同let)

數組的解構:

1.模式=數組

模式=數組
        let [a,b,c] = ['測試1','測試2','測試3'];
        console.log(a); //測試1
        console.log(b);	//測試2
        console.log(c); //測試3

2.變量多,值少

變量多,值少
        let [a,b] =  ['測試1','測試2','測試3'];
        console.log(a); //測試1
        console.log(b); //測試2

3.變量少,值多

變量少,值多
        let [a,b,c] = ['測試1','測試2']
        console.log(a);//測試1
        console.log(b);//測試2
        console.log(c);undefined

4.按需取值

 按需取值
        let [a, , b] = ['測試1', '測試2', '測試3']
        console.log(a);//測試1
        console.log(b);//測試3

5. 剩餘值

 剩餘值
        let [a,b,...c] = ['測試1', '測試2', '測試3','測試4']
        console.log(a);//測試1
        console.log(b);//測試2
        console.log(c);//["測試3", "測試4"]

6. 複雜情況

  複雜情況
        let[,,[a,b],c] = ['aa','bb',['cc','dd'],'ee']
        console.log(a)//cc
        console.log(b)//dd
        console.log(c)//ee

對象的解構:

1. 基本的解構

 基本的解構
		let {id,name,age} = {id:1,name:"張三",age:18};
        console.log(id)//1
        console.log(name)//張三
        console.log(age)//18

2. 按需取值

 按需取值
		let {id,name} = {id:1,name:"張三",age:18};
        console.log(id)//1
        console.log(name)//張三

3.剩餘值

 剩餘值
		let {id,...c} = {id:1,name:"張三",age:18};
        console.log(id) //1
        console.log(c)// object{
        					age:18,
        					name:"張三"}

4. 有衝突,可以爲變量定義其他名字

 有衝突,可以爲變量定義其他名字
		let id = 5;
        let {id} = {id:1,name:"張三 ",age:18};//Identifier 'id' has already been declared
        let {id:nameId} = {id:1,name:"張三 ",age:18};//Identifier 'id' has already been declared
        console.log(nameId);//張三

5. 複雜的情況

 複雜的情況
		 let {code, data} = {
            code: 200, 
            msg: '成功', 
            data: [
                {id:1, title: 'aaa'}, 
                {id:2, title: 'aaa'}, 
                {id:3, title: 'aaa'}
            ]
        };
        console.log(code);
        console.log(data);

箭頭函數

樣式:

let fn = () =>{
			  }
()小括號內放入參數,{}大括號內放入函數體

特點:

  • 如果箭頭函數參數只有一個,則小括號可以省略
  • 如果箭頭函數的函數體只有一行代碼,則大括號可以省略,並且默認表示返回函數體的值(自帶return效果)
  • 箭頭函數的內部沒有arguments對象
    • 沒有argument對象那怎麼遍歷呢?
    • let abc = (…z) =>{
      console.log(z);
      }
      abc(1,2,3,4,5,6);
  • 箭頭函數不能當作構造函數
  • 箭頭函數的內部沒有自己的this,箭頭函數的this指向外部作用域的this

函數參數的默認值

(如果某個參數有默認值,則需要把該參數放到參數列表後面)

function abc (x,y=3){
	console.log(x+y);
}

內置對象的擴展:

Array

1.拼接

拼接
        let arr1 = [1,2,3,4];
        let arr2 = [4,5,6,7];
        let arr3 = [...arr1,...arr2];
        console.log(...arr3);  //1,2,3,4,4,5,6,7

2.將爲數組轉換成數組

將爲數組轉換成數組
        let weishuzu = {
            0:"張三",
            1:"李四",
            2:"王五",
            length:3
        }
        let arr = Array.from(weishuzu);
        console.log(...arr)//張三,李四,王五

3.forEach遍歷

forEach 遍歷
        ES5
        [1,2,3,4,5,6,7,8,9].forEach(function(item){
            console.log(item)
        });
        ES6
        [1,2,3,4,5,6,7,8,9].forEach(item=>console.log(item));

4.find(值)和findIndex(索引)

find()和findIndex(索引)
        let result = [1,2,3,4,5,6,7,8,9].find(function(item,index,arr){
            return item>5;
        });
        console.log(result);
        let result = [1,2,3,4,5,6,7,8,9].findIndex(function(item,index,arr){
            return item>5;
        });
        console.log(result);

5.includes(‘查找的值’,[開始的位置])

includes
		let arr = [1,2,3,4,5,6,7,8,9];
        console.log(arr.includes(4,2));//true
        console.log(arr.includes(4,9));//false
        console.log(arr.includes(10));//false
        console.log(arr.includes(1));//true

String

1.模板字符串

模板字符串
        let a ="你好";
        let b = {
            name:"張三",
            age:18,
        };
        let c = `${b.name}${a}今天是一個號好天氣,我今年${b.age}歲`
        console.log(c);//張三你好今天是一個號好天氣,我今年18歲

2.includes查找字符串中是否包含了某個字符串

includes查找字符串中是否包含了某個字符串
        let a = 'ABCDEFGHIJKLMN';
        console.log(a.includes('A',0));//true  從索引爲0的地方開始尋找A 返回boolean
        console.log(a.includes('A',1));//false

3.startWith() 查找字符串開頭是否含有某個字符串

startWith() 查找字符串開頭是否含有某個字符串
        let a = 'ABCDEFGHIJKLMN';
        console.log(a.startsWith('A'));//true
        console.log(a.startsWith('B'));//false

4.endsWith() 查找字符串結尾是否含有某個字符串

endsWith() 查找字符串結尾是否含有某個字符串
        let a = 'ABCDEFGHIJKLMN';
        console.log(a.endsWith('LMN'));//true
        console.log(a.endsWith('kMN'));//false

5.repeat() 重複一個字符串 參數爲重複的次數

repeat() 重複一個字符串 參數爲重複的次數
        let a = 'ABCDEFGHIJKLMN';
        console.log(a.repeat(10));

6.trim() 去掉字符串兩邊的空白

trim()  去掉字符串兩邊的空白
        let a = '        ABCDEFGHIJKLMN      ';
        console.log(a.trim());

Number

		Number.parseInt()
        Number.parseFloat()
        console.log(Number.parseInt('123abc'));

數據結構Set、Map

set

Set
        //Set的特點就是該對象裏面的成員不會有重複。
        // - `size`:屬性,獲取 `set` 中成員的個數,相當於數組中的 `length`
        // - `add(value)`:添加某個值,返回 Set 結構本身。
        // - `delete(value)`:刪除某個值,返回一個布爾值,表示刪除是否成功。
        // - `has(value)`:返回一個布爾值,表示該值是否爲`Set`的成員。
        // - `clear()`:清除所有成員,沒有返回值。

        let s = new Set();
        let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 3, 2, 1];
        arr.forEach(function (item) {
            s.add(item) //set的add方法
        });
        console.log(...s); //去重  方式1
        console.log(Array.from(s)); // from是將僞數組變爲數組; 去重 方式2
        console.log(s.size) //獲取個數
        console.log(s.delete(9)); //刪除數據返回boolean
        console.log(...s); //輸出刪除之後的set
        console.log(s.has(2)); //返回一個boolean,告知參數是否是set的成員
        s.clear(); //清空所有的成員,沒有返回值
        console.log(s); //查看清空之後的set


 完成字符串去重
        let set = new Set('ababbc');
        let str = ([...set]).join('');
        console.log(str); // abc

遍歷

			let arr = ['add', 'delete', 'clear', 'has'];
            let list = new Set(arr);
			********************1.***********************
            for (let key of list.keys()) {
                console.log('keys', key);
            }
            //  keys add
            //  keys delete
            //  keys clear
            //  keys has
            **********************************************
            ********************2.***********************
			for (let value of list.values()) {
                console.log('value', value);
            }
            //  value add
            //  value delete
            //  value clear
            //  value has
            **********************************************
            ********************3.***********************
			for (let [key, value] of list.entries()) {
                console.log('entries', key, value);
            }
            //  entries add add
            //  entries delete delete
            //  entries clear clear
            //  entries has has
            **********************************************
             ********************4.***********************
			list.forEach(function (item) {
                console.log(item);
            })
            //add  delete  clear  has
            **********************************************

weakset

  • 方法
    • WeakSet.prototype.add(value):向 WeakSet 實例添加一個新成員。
    • WeakSet.prototype.delete(value):清除 WeakSet 實例的指定成員。
    • WeakSet.prototype.has(value):返回一個布爾值,表示某個值是否在 WeakSet 實例之中
  • 注意
    • WeakSet 沒有size屬性和forEach方法,沒有辦法遍歷它的成員。
    • WeakSet的元素只能是對象, WeakSet中的對象是弱引用, 只是把地址拿過來, 沒有clear屬性, 不能遍歷
  • 原因:
    • WeakSet 不能遍歷,是因爲成員都是弱引用,隨時可能消失,遍歷機制無法保證成員的存在,很可能剛剛遍歷結束,成員就取不到了。WeakSet 的一個用處,是儲存 DOM 節點,而不用擔心這些節點從文檔移除時,會引發內存泄漏。
        let weakList = new WeakSet();
        let arg = {
            a: '1'
        };
        weakList.add(arg);
        weakList.add({
            b: '2'
        });
        console.log('weakList', weakList);
        //weakList WeakSet {Object {b: "2"}, Object {a: "1"}}

map

  • Map中的key可以是任意數據類型:字符串、數組、對象等 要注意集合Set添加元素用add(),而集合Map添加元素用set()
		*******************************1.***************************
		let map = new Map();
        let arr = ['123'];
        map.set(arr, 456);
        console.log('map', map, map.get(arr));
        ************************************************************
        *******************************2.***************************
        let map = new Map([
            ['a', 123],
            ['b', 456]
        ]);
        console.log('map args', map);
        //map args Map {"a" => 123, "b" => 456}

        //size delete clear方法 與 遍歷同set一樣
        console.log('size', map.size); //size 2
        console.log('delete', map.delete('a'), map); //delete true Map {"b" => 456}
        map.clear();
        console.log('clear', map); //clear Map {}
        ************************************************************

weakmap

  • 方法:
    • 1.沒有遍歷方法clear()、keys()、values()、entries()、size屬性

    • 2.只有get()、set()、has()、delete()

  • 注意:
    • 同WeakSet一樣接收的key值必須是對象, 沒有size屬性, clear方法, 也是不能遍歷
        let weakmap = new WeakMap();
        let o = {};
        weakmap.set(o, 123);
        console.log(weakmap.get(o)); //123

定義對象的簡潔方式

		let id = 1;
		let name = 'zs';
		let age = 20;
		
		// 之前定義對象的方案
		// let obj = {
		//     // 屬性: 值
		//     id: id,
		//     name: name,
		//     age: age,
		//     fn: function () {
		//         console.log(this.age);
		//     }
		// };
		
		// obj.fn();
		
		// ES6的新方案
		let obj = {
		    id,  // 屬性名id和前面的變量id名字相同,則可以省略 :id
		    name,
		    nianling: age,
		    // 下面的函數是上面函數的簡化寫法,可以省略 :function  。但是注意這裏僅僅是上面函數的簡化,不是箭頭函數
		    fn () {
		        console.log(this.name);
		    }
		};
		obj.fn();

好了,今日就更新到這裏,有時間我會持續更新ES6的最新語法的,歡迎大家前來評論!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章