ES6-我的寒假學(xué)習(xí)計劃之ES6

學(xué)習(xí)計劃

學(xué)習(xí)日志之ES6(完結(jié))

2020/12/27一2021/1/19
用時24天

  • 2020/12/27 es6 P27-P29

  • Promise

    const P = new Promise((resolve,reject)=>{
      settimeout(()=>{
        resolve('用戶數(shù)據(jù)');//成功
        //reject('程序出錯');//錯誤
      },1000);
    });
    //調(diào)用then()方法
    //then()包含兩個方法參數(shù){1.當成功(resolve)時運行value方法2.當失敗(reject)時運行reason方法}且賦值
    P.then(value=>{
      console.log(value);
    },reason=>{
      console.error(reason);
    });
    //調(diào)用catch()方法
    //catch()與then()類似冤寿,但then()包含成功(value)和失敗(reason)兩個參數(shù),而cantch()只有失敗參數(shù)(reason)
    P.catch(reason=>{
      console.error(reason);
    });
    
  • 2020/12/29 es6 P30-P31

  • Set

  • //Set基本語法及屬性
    //去重性
    const a = new Set(['張三','李四','王五','張三']);//'張三','李四','王五'
    const b = new Set(['111','222']);
    
    //向集合中添加一個對象
    a.add('張飛');//'張三','李四','王五','張飛'
    
    //向集合中刪除一個對象
    a.delete('張三');//'李四','王五','張飛'
    
    //查看集合中是否包含一個對象
    a.has('李四');//true
    a.has('李逵');//false
    
    //清除一個集合
    a.clear();
    
    //遍歷一個集合
    for(let v of b){
      console.log(v);
      //111
      //222
    }
    
  • //Set集合實踐
    //設(shè)置兩組數(shù)組
    let a = [1,2,3,5,6,6];
    let b = [2,3,4,5,7];
    //a數(shù)組去重
    const result = new Set(a);//1,2,3,5,6
    
    //a與b交集
    const result2 = [...new Set(a)].filter(item => {
      let b2 = new Set(b);
      if(b2.has(item))return true;
      else return false;
    });
    console.log(result);//2,3,5
    //簡寫語法
    const r2 = [...new Set(a)].filter(item => new Set(b).has(item));//2重慢,3沃饶,5
    
    //a與b并集
    const result3 = [...new Set(...a,...b)];//1,2,3,4,5,6,7
    
    //a與b差集
    const r2 = [...new Set(a)].filter(item => !(new Set(b).has(item)));//1,4,6,7
    
  • 2020/12/31 es6 P32-P34

  • Map

  • //Map的基本語法及使用
    //聲明一個Map
    let m = new Map();
    
    //給Map m添加一個普通類型的元素
    m.set('name','kjkjkl');//第一個參數(shù)為鍵值key,第二個參數(shù)為值value
    //給Map m 添加一個對象鍵值類型的元素,值為方法
    let n = {
      sex:'男'
    }
    m.set(n,function(){
      console.log('我是一個方法');
    });
    //刪除Map中的一個元素
    m.delete('name');
    //獲取Map中的一個鍵的值
    m.get(n);//f();
    //聲明一個變量用作存儲Map中n鍵值的方法
    let f = m.get(n);
    f();
    
  • Class

  • //聲明一個Class
    class Phone{
      //constructor方法(每個類中有且只有一個constructor方法,該方法采用固定名稱)即:構(gòu)造函數(shù)方法
        constructor(brand,price){
          this.brand = brand;
          this.price = price;
        }
        //聲明一個功能方法
        vivo(){
          console.log('我是一部vivo手機');
        }
        iphoneX(){
          console.log('我是一部iphoneX,我比vivo手機貴');
        }
    }
    //vivo手機初始化
    let vivo = new Phone('vivo',1999);
    vivo.vivo();//我是一部vivo手機
    
    //蘋果X初始化
    let iphonex = new Phone('iphoneX',9999);
    iphonex.iphoneX();//我是一部iphoneX,我比vivo手機貴
    
  • //class靜態(tài)成員
    //聲明一個class
    class Phone{
      //聲明靜態(tài)變量name
      static name = 'kjkjkl';
      //生命靜態(tài)方法f()
      static f(){
        console.log('test test test');
      }
    }
    //初始化類
    let p = new Phone();
    console.log(Phone.name);//kjkjkl
    console.log(p.name);//undefined
    Phone.f();//test test test
    p.f();//直接報錯
    //結(jié)論:靜態(tài)化變量,方法,對象無法被賦值給初始化的對象直接讀取
    
  • 2021/1/1 es6 p35-p38

  • //class之類的繼承
    //聲明一個父類Phone
    class Phone{
      constructor(brand,price){
        this.brand = brand;
        this.price = price;
      }
      call(){
        console.log('我可以打電話');
      }
    }
    //聲明一個子類SmartPhone
    //固定寫法extends
    class SmartPhone extends Phone{
      constructor(brand,price,color,size){
        //繼承 固定寫法super
        super(brand,price);
        this.color = color;
        this.size = size;
      }
      //生成成員函數(shù)
      Photo(){
        console.log('我可以照相');
      }
      PlayGame(){
        console.log('我可以打游戲');
      }
      //繼承/重寫成員函數(shù)call()
      call(){
        console.log('我可以打視頻電話');
      }
    }
    //實例化對象
    let p = new SmartPhone('vivo',1200,'black',6.3);
    p.Photo();//我可以照相
    p.PlayGame();//我可與打游戲
    p.call();//我可以打視頻電話
    console.log(p);//SmartPhone{vivo,1200,black,6.3}Photo:f();PlayGame:f();/Phone:call():f()
    
  • //class中g(shù)etter和setter設(shè)置
    //聲明一個類Phone
    class Phone{
      //設(shè)置price的get
      get price(){
        console.log('價格屬性被讀取了');
        return '返回結(jié)果';
      }
      //設(shè)置price的set
      //set中至少要有一個參數(shù)
      set price(newVal){
        console.log('價格參數(shù)被修改了');
      }
      //實例化對象
      let s = new Phone();
      s.price = 'free';//價格參數(shù)被修改了
      console.log(s.price);//1.價格參數(shù)被讀取了2.返回結(jié)果
    }
    //結(jié)論:使用場景{get:處理動態(tài)數(shù)據(jù)}{set:多種條件處理}
    
  • 2021/1/2 es6 p39-p40

  • //數(shù)值擴展
    //1.Javascript的最小精度 Number.EPSILON
    console.log(0.1 + 0.2);//0.3000000000004 非0.3
    function eq(a,b){
      if(Math.abs(a + b) < Number.EPSILON){
        return true;
      }else{
        return false;
      }
    }
    console.log(eq(0.1 + 0.2,0.3));//true
    
    //2.二進制和八進制
    console.log(0b1010);//10
    console.log(0o777);//511
    console.log(100);//100
    console.log(0xff);//255
    
    //3.檢測一個數(shù)是否為有限數(shù) Number.isFinite
    console.log(Number.isFinite(100));//true
    console.log(Number.isFinite(0));//true
    console.log(Number.isFinite(Infinity));//false
    
    //4.檢測一個數(shù)值是否為NaN Number.isNaN
    console.log(Number.isNaN(123));//false
    console.log(Number.isNaN(123/'test'));//true
    
    //5.字符串轉(zhuǎn)整數(shù)筹煮,字符串轉(zhuǎn)浮點數(shù) Number.ParseInt||Number.parseFloat
    console.log(Number.ParseInt('123abc'));//123
    console.log(Number.ParseFloat('1.23a'));//1.23
    
    //6.判斷一個數(shù)是否為整數(shù) Number.isInteger
    console.log(Number.isInteger(10));//true
    console.log(Number.isInteger(10.2));//false
    
    //7.將數(shù)字的小數(shù)部分抹掉 Math.trunc
    console.log(Math.trunc(10.2));//10
    
    //8.判斷一個數(shù)字為正數(shù) 負數(shù) 還是0 Math.sign
    console.log(Math.sign(100),Math.sign(-100),Math.sign(0));//1 -1 0
    
  • //對象方法擴展
    //1.判斷兩個值是否完全相等 Object.is
    console.log(Object.is(1,1));//true;
    console.log(Object.is(1,0));//false;
    console.log(Object.is(NaN,NaN));//true;
    console.log(NaN === NaN);//false
    
    //2.對象的合并 Object.assign
    let Config1 = {
      host:'127.0.0.1',
      port:8080,
      uid:'kjkjkl',
      pwd:'123456',
      add:'test'
    }
    let Config2 = {
      host:'localhost',
      port:80,
      uid:'lmf',
      pwd:'123'
    }
    Object.assign(Config1,Config2);//第一個對象屬性會被第二個對象屬性覆蓋
    console.log(Config1);//{host:'localhost',port:80,uid:'lmf',pwd:'123',add:'test'}
    
    //3.設(shè)置原型對象 setPrototypeOf
    let s1 = {
      name:'kjkjkl'
    }
    let s2 = {
      game:['CF','LOL','MC']
    }
    Object.setPrototypeOf(s1,s2);
    console.log(s);//{name:'kjkjkl',_proto_:Object(play:['CF','LOL','MC'])}
    
    //獲取原型對象 getPrototypeOf
    //截取上面例子
    console.log(getPrototypeOf(s));//play:['CF','LOL','MC'],_proto_:Object
    
  • 2021/1/4 es6 模塊化

  • 導(dǎo)出模塊 export

  • //分別暴露
    export let name = 'm1';
    export function test(){
      console.log('這里是m1,分別暴露');
    }
    
  • //統(tǒng)一暴露
    let name = 'm2';
    function test(){
      console.log('這里是m2,統(tǒng)一暴露')居夹;
    }
    export {
      name,
      test
    }
    
  • //默認暴露
    export default {
      name: 'm3',
      test: function(){
        console.log('這里是m3败潦,默認暴露');
      }
    }
    
  • 導(dǎo)入模塊 import

  • //通用導(dǎo)入方法
    import * as m1 from './這里填寫模塊文件路徑/m1.js';
    import * as m2 from './這里填寫模塊文件路徑/m2.js';
    import * as m3 from './這里填寫模塊文件路徑/m3.js';
    m1.test();//這里是m1,分別暴露
    m2.test();//這里是m2,統(tǒng)一暴露
    m3.default.test();//這里是m3,默認暴露 默認暴露的固定寫法本冲,方法或變量前加default
    
  • //解構(gòu)賦值形式
    import {name as m1_name,test as m1_test} from './這里填寫模塊文件路徑/m1.js';
    import {name as m1_name,test as m1_test} from './這里填寫模塊文件路徑/m2.js';
    import {default as m3} from './這里填寫模塊文件路徑/m3.js';
    m1_test();//這里是m1,分別暴露
    m2_test();//這里是m2,統(tǒng)一暴露
    m3.test();//這里是m3,默認暴露
    //注意:解構(gòu)賦值形式導(dǎo)入默認暴露固定寫法default后必須加as 別名
    
  • //簡便導(dǎo)入方式 --- 只針對于默認暴露
    import m3 from './這里填寫模塊文件路徑/m3.js';
    m3.test();//這里是m3,默認暴露
    

以上方式用于在html文件內(nèi)導(dǎo)入 <script>必須有type="module"屬性

在js文件內(nèi)導(dǎo)入方式如下↓

index.html使用m1.js的test方法

//m1.js
export default {
  name: 'm1';
  test: function(){
    console.log('test');
  }
}
//app.js
import m1 from './路徑/m1.js';
m1.test();
<!--index.html-->
<html>
  <head>
    <title>ES6模塊化</title>
  </head>
  <body>
    <!--test-->
    <script scr='./路徑/app.js' type="module"></script>
  </body>
</html>
  • 2021/1/6 es7 featrue

  • //includes 查看一個數(shù)組中是否包含一個元素 包含返回true,不包含返回false
    //includes與indexOf相同作用变屁,返回值不一樣 indexOf包含返回0,不包含返回-1
    const sdmz = ['西游記','水滸傳','三國演義','紅樓夢'];
    //includes
    console.log(sdmz.includes('西游記'));//true
    console.log(sdmz.includes('道德經(jīng)'));//false
    
    //indexOf
    console.log(sdmz.indexOf('西游記'));//0
    console.log(sdmz.indexOf('道德經(jīng)'));//-1
    
    //冪運算
    //正常情況下
    console.log(Math.pow(2, 10));//1024 表示2的10次方
    //ES7
    console.log(2 ** 10);//1024
    
  • 2021/1/9 es8 async和await

  • async

  • //async函數(shù)一般情況下用來返回Promise的值
    //生成async類型的函數(shù)Main()
    const Main = async()=>{
      return new Promise((resolve,reject)=>{
        resolve('Success!');
        reject('Error~');
      });
    }
    
    const result = Main();
    
    result.then(value=>{
      console.log(value);
    },reason=>{
      console.error(reason);
    });
    
    Main();
    //控制臺:Success!
    
  • await

  • //await一般包含在async函數(shù)里
    //await返回的是Promise成功的值
    const P = new Promise((resolve,reject)=>{
      resolve('Success');
      reject('Error');
    });
    
    const Main = async()=>{
      try{
        const result = await P;
        console.log(result);
      }catch(e){
        console.error(e);
      }
    }
    Main();
    //控制臺:Success
    
  • 2021/1/10 es8 async和await結(jié)合使用案例

  • #### 使用Promise方法以及async和await新特性通過node('fs')模塊讀取.md文件
    
  • test1.md    test2.md    test3.md
    
  • //大體解題思路:
    //獲取test1.md
    const fs = require('fs');
    function gettest1(){
      return new Promise((resolve, reject)=>{
        fs.readFile('路徑/test1.md',(err,data)=>{
          if(err)reject(err);
          resolve(data);
        })
      });
    }
    //獲取test2.md
    function gettest2(){
      return new Promise((resolve, reject)=>{
        fs.readFile('路徑/test2.md',(err,data)=>{
          if(err)reject(err);
          resolve(data);
        })
      });
    }
    //獲取test3.md
    function gettest3(){
      return new Promise((resolve, reject)=>{
        fs.readFile('路徑/test3.md',(err,data)=>{
          if(err)reject(err);
          resolve(data);
        })
      });
    }
    //讀取數(shù)據(jù)
    async function Main(){
      const test1 = await gettest1();
      const test2 = await gettest2();
      const test3 = await gettest3();
      //輸出結(jié)果
      console.log(test1);//test1
      console.log(test2);//test2
      console.log(test3);//test3
    }
    //執(zhí)行函數(shù)
    Main();
    

通過async和await封裝ajax請求

  • //定義ajax請求
    function ajax(url){
      return new Promise((resolve, reject)=>{
        const xhr = new XMLHttpRquest();
        xhr.open('GET',url);
        xhr.send();
        xhr.onreadystatechange = function(){
          if(xhr.readyState === 4){
            resolve(xhr.response);
          }
        }
      });
    }
    //調(diào)用請求并傳參
    async function Main(){
      const shi = await ajax('http://poetry.apiopen.top/sentences');
      console.log(JSON.Parse(shi).result.name);//白日依山盡眼俊,黃河入海流意狠。
    }
    //調(diào)用函數(shù)Main
    Main();
    
  • 2021/1/12 es8 對象方法擴展

Object.keys(object)返回一個對象的所有鍵粟关,返回類型為數(shù)組

  • const kjkjkl = {
      id: '1001',
      pwd: '123456',
      address: '山東淄博'
    }
    console.log(Object.keys(kjkjkl));//Array['id','pwd','address']
    

Object.values(object)返回一個對象的所有值,返回類型為數(shù)組

  • const kjkjkl = {
      id: '1001',
      pwd: '123456',
      address: '山東淄博'
    }
    console.log(Object.values(kjkjkl));//Array['1001','123456','山東淄博']
    

Object.entries(object)返回一個對象的所有元素,類型為數(shù)組包含鍵與值

  • const kjkjkl = {
      id: '1001',
      pwd: '123456',
      address: '山東淄博'
    }
    console.log(Object.entries(kjkjkl));//[Array{"id","1001"},Array{"pwd","123456"},Array{"address","山東淄博"}]
    //放入Map
    const m = new Map(Object.entries(kjkjkl));
    //取出鍵為id的值
    console.log(m.get('id'));//1001
    

Object.getOwnPropertyDescriptors(object)對象屬性的描述對象

  • const kjkjkl = {
      id: '1001',
      pwd: '123456',
      address: '山東淄博'
    }
    console.log(Object.getOwnPropertyDescriptors(kjkjkl));//{id:{...},pwd:{...},address:{...}}
    //ps:其中...為value,writable,enumerable,configurable固定四個屬性
    //value 值,比如id{values:'1001'}
    //writable 是否可寫|默認為true
    //configurable 是否可以刪除|默認為true
    //enumerable 是否可以枚舉|默認為true
    //定義一個對象,且設(shè)置屬性
    const obj = Object.create(null, {
      id: {
        value: '1001',
        writable: true,
        configurable: true,
        enumerable: true
      },
      pwd: {
        value: '123'
      }
    })
    console.log(obj);//{id: "1001", pwd: '123'}
    
  • 2021/1/13 es9 對象展開|正則擴展

對象展開...

  • function connect({host,port,..user}){
      console.log(host);//127.0.0.1
      console.log(port);//80
      console.log(user);//{userid: "1001",username: "kjkjkl",password: "123456"}
    }
    connect({
      host: '127.0.0.1',
      port: '80',
      userid: '1001',
      username: 'kjkjkl',
      password: '123456'
    });
    
  • const skillOne = {
      q: '天音波'
    }
    const skillTwo = {
      w: '金鐘罩'
    }
    const skillThree = {
      e: '天雷破'
    }
    const skillFour = {
      r: '猛龍擺尾'
    }
    const skillzhs = {
      d: '懲戒',
      f: '閃現(xiàn)'
    }
    const mangseng = {...skillOne, ...skillTow, ...skillThree, ...skillFour, ...skillzhs};
    console.log(mangseng);//{q: '天音破',w: '金鐘罩', e: '天雷破', r: '猛龍擺尾', d: '閃現(xiàn)', f: '懲戒'}
    

正則擴展---命名捕獲分組

  • //聲明一個數(shù)組
    const baidu = '<a ;
    //聲明正則
    const reg = /<a href=".*?">.*?<\/a>/;
    //執(zhí)行匹配
    const result = reg.exec(baidu);
    //輸出結(jié)果
    console.log(result);//三個元素
    //0: "<a 
    //1: "http://www.baidu.com"
    //2: "百度"
    //屬性groups: undefined
      //進行分組
    const bili = '<a ;
    const reg1 = /<a href="?<url>.*?">?<text>.*?<\/a>/;//在獲取匹配數(shù)據(jù)的前面加?<組名稱>
    //執(zhí)行匹配
    const result1 = reg1.exec(bili);
    //輸出結(jié)果
    console.log(result1.groups.url);//http://www.bilibili.com
    console.log(result1.groups.text);//嗶哩嗶哩
    
    

正則擴展---反向斷言

  • //聲明一個字符串str
    const str = 'yd10086聯(lián)通10010電話';
    //正向斷言 => 匹配數(shù)字且后一位為‘電’
    const reg = /\d+(?=電)/;
    //執(zhí)行匹配
    const result = reg.exec(str);
    //輸出
    console.log(result);//0:10010
    //反向斷言 => 條件為前面為‘通’ 匹配數(shù)字
    const reg1 = /(?<=通)\d+/;
    console.log(reg.exec(str));//0:10010
    

    正則擴展---dotAll模式

  • //要求:正則表達式獲取a標簽以及p標簽內(nèi)的內(nèi)容
    const str = `<ul>
                    <li>
                        <a>肖申克的救贖</a>
                        <p>上映時間: 1994-09-10</p>
                    </li>
                    <li>
                        <a>阿甘正傳</a>
                        <p>上映時間: 1994-07-06</p>
                    </li>
            </ul>`;
    //普通模式
    const reg1 = /<li>\s+<a>(.*?)<\/a>\s+<p>(.*?)<\/p>/;
    //dotAll模式 單個匹配為s 全局匹配為gs
    const reg2 = /<li>.*?<a>(.*?)<\/a>.*?<p>(.*?)<\/p>/gs;
    let result;
    let data = [];
    while(result = reg2.exec(str)){
      data.push({title: result[1],time: result[2]});
    }
    console.log(data);
    //0: {title: "肖申克的救贖", time: "上映時間: 1994-09-10"}
    //1: {title: "阿甘正傳", time: "上映時間: 1994-07-06"}
    
  • 2021/1/9 ES10-ES11

ES10 Object.fromEntries() 數(shù)組與對象之間的轉(zhuǎn)化

  • //二維數(shù)組
    console.log(Object.fromEntries([
      ["name","kjkjkl"],
      ["love",'javascript,C#,Asp.Net']
    ]));//{name: "kjkjkl",like: "javascript","C#","Asp.Net"}
    
  • //Map
    const m = new Map();
    m.set('name','kjkjkl');
    console.log(Object.fromEntries(m));//{name: "kjkjkl"}
    
  • //ES8 - Object.Entries
    console.log(Object.entries({
      name: 'kjkjkl'
    }));//[Array(2) => 0:name,1:kjkjkl]
    

ES10 字符串擴展trimStart()和trimEnd()

  • //trim()去字符串所有空格
    //trimStart()去字符串起始位置空格
    //trimEnd()去字符串末尾空格
    const str = '   test   ';//前后各有三個空格
    console.log(str.trim());//test;
    console.log(str.trimStart());//test   ;
    console.log(str.trim()End);//   test;
    

ES10 flat()和flatMap()

  • //flat 平 數(shù)組降維 => 三維降二維|二維降一維
    const arr = [1,2,3,[4,5,6,[7]]];
    //三維降二維
    console.log(arr.flat());//[1,2,3,4,5,6,Array(1) => 0:7]
    //三維降二維再降一維
    console.log(arr.flat().flat());//[1,2,3,4,5,6,7]
    
  • //flatMap將Map中的對象進行降維
    const arr = [1,2,3,4,5];
    console.log(arr.flatMap(item => (item*10)));//[10,20,30,40,50]
    

ES10 Symbol.prototype.description屬性

  • //description去Symbol標簽
    let a = Symbol(123);
    console.log(typeof(a),typeof(a.description));//Symbol String
    console.log(a.description);//123
    

ES11 私有屬性 (#)

  • //聲明一個類
    class Person{
      //設(shè)置公有屬性name
      name;
      //設(shè)置私有屬性age,weight
      #age;
      #weight;
      //生成構(gòu)造函數(shù)
      constructor(name,age,weight){
        //指向?qū)傩圆①x值
        this.name = name;
        this.#age = age;
        this.#weight = weight;
      }
      //私有屬性只能進行內(nèi)部調(diào)用
      info(){
        //因為是類的屬性,所以前面必須要加this
        console.log(this.name);//小宇
        console.log(this.#age);//17
        console.log(this.#weight);//58kg
      }
    }
    //初始化類
    let girl = new Person('小宇',17,'58kg');
    //調(diào)用函數(shù)
    girl.info();
    //外部調(diào)用類的屬性
    console.log(girl.name);//小宇
    //調(diào)用私有屬性會報錯
    //console.log(girl.#age);//Uncaught SyntaxError: Private field '#age' must be declared in an enclosing class
    

ES11 Promise.allSettled()與Promise.all()

  • //定義兩個Promise對象
    const p1 = new Promise((resolve, reject)=>{
      resolve('商品數(shù)據(jù) -1');
    });
    const p2 = new Promise((resolve, reject)=>{
      reject('出錯啦');
    });
    //allSettled返回的結(jié)果永遠為fulfilled 值為所有promise的攜帶參數(shù),包含resolve和reject
    console.log(Promise.allSettled([p1, p2]));//state:fulfilled
    //all返回的結(jié)果:當一個Promise為reject時环戈,返回rejected 值為reject中的參數(shù)
    console.log(Promise.all([p1, p2]));//state:rejected
    

ES11 string.prototype.matchAll()

  • //要求:提取全局a標簽和p標簽的值
    const str = `<ul>
                  <li>
                      <a>肖生克的救贖</a>
                      <p>上映日期:1994-09-10</p>
                  </li>
                  <li>
                      <a>阿甘正傳</a>
                      <p>上映日期:1994-07-06</p>
                  </li>
                  </ul>`;
                  //聲明正則表達式
              const reg = /<li>.*?<a>(.*?)<\/a>.*?<p>(.*?)<\/p>/sg;
              //給定一個字符串和一個正則表達式闷板,.matchAll()為所有匹配的匹配對象返回一個迭代器
              let result = str.matchAll(reg);
              //遍歷內(nèi)容并輸出
              for(let v of result){
                  console.log(v);
              }
    

ES11 可選鏈操作符?.

  • //?.檢測屬性是否存在
    function main(config){
      console.log(config?.db?.host);
    };
    main({
      db: {
        host: '192.168.1.11',
        username: 'kjkjkl'
      },
      cache: {
        host: '127.0.0.1',
        usernmae: 'admin'
      }
    });
    

動態(tài)import

  • <!DOCTYPE html>
    <html>
      <head>
          <meta charset="utf-8">
          <title>動態(tài)import</title>
      </head>
      <body>
          <script src="js/app_1.js" type="module"></script>
      </body>
    </html>
    
  • //app_1.js
    //局部引用方法,節(jié)省資源占用
    import('./hello.js').then(module=>{
      module.hello();
    })
    
  • //hello.js
    export function hello(){
      console.log('Hello World!');
    }
    

ES11 - BigInt

  • //聲明一個大整形n
    //大整形不可與整形直接運算
    let n = 111n;
    console.log(n,typeof(n));//111n BigInt
    
    //大數(shù)值運算
    //聲明最大安全整數(shù)Number.MAX_SAFE_INTEGER
    let max = Number.MAX_SAFE_INTEGER;
    console.log(max);//9007199254740991
    console.log(max +1);//9007199254740992
    
    //轉(zhuǎn)換為大整形
    console.log(BigInt(max));//9007199254740991n
    //直接BigInt(max) +1會報錯,必須轉(zhuǎn)換為BigInt(1)
    console.log(BigInt(max) + BigInt(1));//9007199254740992n
    

ES11 - 全局對象globalThis

  • //任何環(huán)境下院塞,globalThis 都是存在的遮晚,都可以從它拿到頂層對象,指向全局環(huán)境下的 this
    //瀏覽器里面拦止,頂層對象是 window县遣,但 Node 和 Web Worker 沒有window
    //瀏覽器和 Web Worker 里面,self 也指向頂層對象汹族,但是 Node 沒有 self
    //Node 里面萧求,頂層對象是 global,但其他環(huán)境都不支持
    console.log(globalThis);
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末顶瞒,一起剝皮案震驚了整個濱河市夸政,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌榴徐,老刑警劉巖守问,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異坑资,居然都是意外死亡耗帕,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門袱贮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兴垦,“玉大人,你說我怎么就攤上這事字柠√皆剑” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵窑业,是天一觀的道長钦幔。 經(jīng)常有香客問我,道長常柄,這世上最難降的妖魔是什么鲤氢? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任搀擂,我火速辦了婚禮,結(jié)果婚禮上卷玉,老公的妹妹穿的比我還像新娘哨颂。我一直安慰自己,他們只是感情好相种,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布威恼。 她就那樣靜靜地躺著,像睡著了一般寝并。 火紅的嫁衣襯著肌膚如雪箫措。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天衬潦,我揣著相機與錄音斤蔓,去河邊找鬼。 笑死镀岛,一個胖子當著我的面吹牛弦牡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播漂羊,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼驾锰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拨与?” 一聲冷哼從身側(cè)響起稻据,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎买喧,沒想到半個月后捻悯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡淤毛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年今缚,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片低淡。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡姓言,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蔗蹋,到底是詐尸還是另有隱情何荚,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布猪杭,位于F島的核電站餐塘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏皂吮。R本人自食惡果不足惜戒傻,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一税手、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧需纳,春花似錦芦倒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至慌盯,卻和暖如春周霉,著一層夾襖步出監(jiān)牢的瞬間掂器,已是汗流浹背亚皂。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留国瓮,地道東北人灭必。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像乃摹,于是被迫代替她去往敵國和親禁漓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容