学习ES6-11的第一天

  • 一、ES6
    • 1.1let关键字四大特性
    • 1.2let点击变色小案例
    • 1.3const关键字五大特性
    • 1.4解构赋值
    • 1.5模板字符串
    • 1.6对象的简化写法
    • 1.7箭头函数
      • 1.7.1箭头函数中this是静态的,始终指向函数声明作用域下的this的值
      • 1.7.2不能构造实例化对象,不能使用arguments变量
      • 1.7.3demo01点击方块两秒变色
      • 1.7.4demo02从数组中返回偶数
    • 1.8给函数参数赋初始值
    • 1.9rest参数
  • 二、ES6
    • 2.1扩展运算符
      • 2.1.1扩展运算符介绍
      • 2.1.2扩展运算符应用
    • 2.2Symbol介绍与创建
      • 2.2.1介绍
      • 2.2.2往对象里面添加值demo01
      • 2.2.3往对象里面添加值demo02
      • 2.2.4Symbol内置值
    • 2.3迭代器
      • 2.3.1for in和for of循环
      • 2.3.2遍历原理
      • 2.3.3自定义遍历数据
    • 2.4生成器
      • 2.4.1函数声明及调用
      • 2.4.2生成器函数的参数
      • 2.4.3生成器的实例demo01(回调地狱)
      • 2.4.4生成器的实例demo02
    • 2.5set集合
      • 2.5.1集合介绍和api
      • 2.5.2集合基操
    • 2.6map
      • 2.6.1map介绍和api
    • 2.7Class类基操
      • 2.7.1Class初体验
      • 2.7.2Class的静态成员介绍
      • 2.7.3继承
      • 2.7.4get和set
    • 2.8数值扩展和对象扩展
      • 2.8.1数值扩展
      • 2.8.2对象扩展
    • 2.9模块化
      • 2.9.1暴露数据三种方式
      • 2.9.2导入数据三种方式
  • 三、ES6
    • 3.1bable模块化代码转换(解决兼容性问题)
  • 四、ES7
    • 4.1查找数组元素存在,和幂运算
  • 五、ES8
    • 5.1async和await
    • 5.2对象方法扩展
  • 六、ES9
    • 6.1rest参数
    • 6.2扩展运算符(对象的合并)
    • 6.3正则扩展(捕获命名)
    • 6.4正则扩展(反向断言:根据前后面的东西做唯一识别)
    • 6.5正则扩展(dotAll模式)
  • 七、ES10
    • 7.1对象扩展方法(二维数组转化为对象)
    • 7.2字符串扩展方法(清除左右空格)
    • 7.3数组扩展方法(维度降低)
    • 7.4获取Symbol描述字符串
  • 八、ES11
    • 8.1私有属性
    • 8.2Promise.allSeetled()
    • 8.3字符串扩展(数据批量提取)
    • 8.4可选链操作符
    • 8.5动态import
    • 8.6Bigint类型(超大数值运算)

一、ES6

1.1let关键字四大特性

1.2let点击变色小案例

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><style>.item{width: 200px;height: 100px;border: 1px solid red;margin: 0 5px;float: left;}</style></head><body><h2>点击切换颜色案例</h2><div><div class="item"></div><div class="item"></div><div class="item"></div></div></body>
</html>
<script>// let item = document.getElementsByClassName('item');// for(var i = 0; i < item.length; i++){//     item[i].οnclick=function(){//      this.style.background='pink';//  }// }// console.log(i);   //i的值最后增加到3了如果这里使用item[i]做事件就会报错let item = document.getElementsByClassName('item');for(let i = 0; i < item.length; i++){item[i].onclick=function(){item[i].style.background='pink';}}//因为let具有块级作用域,不像var那样有全局作用域//执行代码的大致样式
//  {// let i = 0
// {//      item[i].οnclick=function(){//          item[i].style.background='pink';
//  这里执行向外层去找i=0,不像var那样找到一个3
//      }
// }
//  {// let i = 1
// //-------
// }
//  {
// let i = 2
// //----------
// }
</script>

1.3const关键字五大特性

最后一个只是修改了地址里面的值并没有修改地址所以不会报错

1.4解构赋值

<script>//数组const str = ['zhangshan','lisi','wangermazi'];let [zhang,li,wang] = str;console.log(zhang);console.log(li);console.warn('---------------------');//对象const duixiang = {name:'houwang',age:18,kk:function(){console.log('猴王爱吃香蕉');}}let {name,age,kk} = duixiang;console.log(name);kk();
</script>

1.5模板字符串

1.6对象的简化写法

<script type="text/javascript">let name = 'houwang';let age = function(){console.log('我的年龄18岁');}//ES6之前的写法// let duixiang = {//     name:name,//    age:age,//  kk:function(){//        console.log('这是ES6前面的写法');//  }// }/**ES6写法**/let duixiang = {name,age,   //重名既可省略kk(){console.log('ES6新写法');}}console.log(duixiang);
</script>

1.7箭头函数

1.7.1箭头函数中this是静态的,始终指向函数声明作用域下的this的值

<script>//1.箭头函数中this是静态的,始终指向函数声明作用域下的this的值function getName1(){console.log(this.name);}var getName2 = () => {console.log(this.name);}window.name='houwang';const name = {name:'猴子爷爷'}// getName1();        //均指向houwang// getName2();      //均指向houwang//使用call改变getName1.call(name);getName2.call(name);
</script>

1.7.2不能构造实例化对象,不能使用arguments变量

1.7.3demo01点击方块两秒变色

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><style>div{width: 200px;height: 200px;background-color: aqua;}</style></head><body><div></div></body>
</html>
<script>let div = document.getElementsByTagName('div');//以前的写法// div[0].οnclick=function(){//     var that = this;//     setTimeout(function(){//        that.style.background='pink';//  },2000);// }//箭头函数中this是静态的,始终指向函数声明作用域下的this的值div[0].onclick=function(){setTimeout(() => {this.style.background='pink';},2000);}
</script>

1.7.4demo02从数组中返回偶数

<script>var str = [2,3,5,8,10];//filter方法筛选数组  返回true进行保留//之前的方法// var arr = str.filter(function(item){//    if(item % 2===0){//      return true;//      }else{//    return false;//     }// })var arr = str.filter(item => item % 2 === 0); console.log(arr);
</script>

1.8给函数参数赋初始值

<script>function add(a,b,c=240){return a+b+c;}console.log(add(5,5));    //输出250console.log(add(5,5,15));    //输出25,15替换了c默认值console.warn(' ');//与解构赋值结合//以前的写法// function jiegou(options){//   console.log(options.user);//    console.log(options.user);//    console.log(options.password);// }function jiegou({url='127.0.0.1',user,password}){console.log(url);console.log(user);console.log(password);}//传了url替换掉url默认值jiegou({url:'localhost',user:'root',password:'123456'})
</script>

1.9rest参数

<script>//ES6中新增rest参数,用来获取函数的实参,替代arguments//ES5写法function date1(){console.log(arguments);}date1('重庆','高等','猴王');//ES6写法function date2(...agrs){console.log(agrs);}date2('重庆','高等','猴王');
</script>

两者不同点就是ES5的是一个对象,ES6是一个数组

二、ES6

2.1扩展运算符

2.1.1扩展运算符介绍

<script>var str = ['重庆','高等','猴王'];function houwang(){console.log(arguments);}houwang(str);  //['重庆','高等','猴王']houwang(...str);   //'重庆','高等','猴王'
</script>

注:ES5是只有一个参数数组,ES6有三个参数

2.1.2扩展运算符应用

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body><div></div><div></div><div></div></body>
</html>
<script>//1.数组的合并var houhome = ['猴子','猴王'];var fenghuang = ['曾毅','玲花'];// //ES5的写法// var str1 = houhome.concat(fenghuang);//ES6的写法var str2 = [...houhome,...fenghuang];console.log(str2);//2.数组的克隆  //注意如果数组中的数据是引用数据类型则是浅拷贝var houhomecopy = [...houhome];console.log(houhomecopy);//3.将伪数组转化成真正的数组var div = document.querySelectorAll('div');console.log(div);   //伪数组console.warn(' ');div2 = [...div];console.log(div2);
</script>

2.2Symbol介绍与创建

2.2.1介绍

<script>//这个字符串猴王只是做个描述 实际跟注释的差不多var s1 = Symbol('猴王');console.log(s1,typeof s1);var s2 = Symbol('猴王');console.warn(s1 === s2);//symbol.for访问的是一个全局的symbol表,如果有了就访问对应对象,没有就重新创建var s3 = Symbol.for('猴王');console.log(s3,typeof s3);var s4 = Symbol.for('猴王');console.warn(s3 === s4);
</script>

2.2.2往对象里面添加值demo01

 var obj = {name:'俄罗斯方块',top:function(){console.log('我可以快速向上移动');},down:function(){console.log('我可以快速向下移动');}}//例如我们这里有一个obj对象   我们向里面添加top和down这两个方法//但我们不确定这里面有没有这个两个方法   为避免破坏里面的数据使用Symbol//1.先声明一个对象var methods = {top:Symbol(),down:Symbol()   }//2.安全快速高效的添加进去这两个方法obj[methods.top]=function(){console.log('我可以快速向上移动');}obj[methods.down]=function(){console.log('我可以快速向下移动');}console.log(obj);

2.2.3往对象里面添加值demo02

let youxi = {name:'狼人杀',[Symbol('say')]:function(){console.log('我可以发言');},[Symbol('zibao')]:function(){console.log('我可以自爆');}}console.log(youxi);

2.2.4Symbol内置值



2.3迭代器

2.3.1for in和for of循环

<script>var houhome = ['猴子','猴儿','猴王'];//result保存的是键值for(let result of houhome) console.log(result);//result保存的是键名(我理解为下标)for(let result in houhome) console.log(result);
</script>

2.3.2遍历原理

<script>var houhome = ['猴子','猴儿','猴王'];//Symbol.iterator 为每一个对象定义了默认的迭代器。该迭代器可以被 for...of 循环使用。var iterator = houhome[Symbol.iterator]();console.log(iterator);console.warn(iterator.next());console.warn(iterator.next());console.warn(iterator.next());console.warn(iterator.next()); //done为真,表示遍历完成
</script>

2.3.3自定义遍历数据

<script>var banji = {name:'花果山',arr:['houwang','houer','houba','houye'],[Symbol.iterator](){let index = 0;let _this = this;return {next:function(){if(index < _this.arr.length){let result = {value:_this.arr[index],done:false};index++;return result;}else{return {value:undefined,done:true};}}}}}for(let v of banji){console.log(v);}
</script>

2.4生成器

2.4.1函数声明及调用


next分割

<script type="text/javascript">//yield函数代码的分隔符  通过next方法来控制代码执行function * gen(){console.log('我是第1个');yield '1'console.log('我是第2个');yield '2'console.log('我是第3个');yield '3'console.log('我是第4个');}let iterator = gen();iterator.next();console.log('-----------');iterator.next();iterator.next();iterator.next();
</script>


每次调用的函数结果是yield的自变量的值

<script type="text/javascript">//yield函数代码的分隔符  通过next方法来控制代码执行function * gen(){//console.log('我是第1个');yield '111'//console.log('我是第2个');yield '222'//console.log('我是第3个');yield '333'//console.log('我是第4个');}let iterator = gen();console.log(iterator.next());console.log('-----------');console.log(iterator.next());console.log(iterator.next());console.log(iterator.next());
</script>

2.4.2生成器函数的参数

gen调用可以传入参数

next方法可以传入实参
注:第n次调用传入的实参将作为第n-1个yield的整体返回结果

<script>function * gen(arg){console.log(arg);let one = yield 111;console.warn(one);let two = yield 222;console.log(two);let three = yield 333;console.log(three);}let iterator = gen('gen传入的参数');console.log(iterator.next('传入却没有输出'));console.log(iterator.next('AAA'));  //第二次调用传入的实参将作为第一次yield返回的结果console.log(iterator.next('BBB'));  //这次调用将作为第二次yield整体的返回结果console.log(iterator.next('CCC'));
</script>

2.4.3生成器的实例demo01(回调地狱)

回调地狱典型案例
<script>// 一秒后输出111,再过一秒输出222,再过一秒输出333//回调地狱setTimeout(() => {console.log(111);setTimeout(() => {console.log(222);setTimeout(() => {console.log(333);},1000)},1000)},1000)
</script>

咱们使用gen生成器函数来安排他

<script>let one = () => {setTimeout(() => {console.log(111);//执行完毕后自动执行下一个iterator.next();},1000)}let two = () => {setTimeout(() => {console.log(222);//执行完毕后自动执行下一个iterator.next();},1000)}let three = () => {setTimeout(() => {console.log(333);},1000)}function * gen(){yield one();yield two();yield three();}let iterator = gen();iterator.next();
</script>

2.4.4生成器的实例demo02

<script>//获取用户数据传给订单数据再查询商品数据let user = () => {setTimeout(() => {let data = '1用户数据'//这是第二次调用next会作为第一次yield的整体返回结果iterator.next(data);},1000)}let getOrder = () => {setTimeout(() => {let data = '2订单数据'iterator.next(data);},1000)}let getGoods = () => {setTimeout(() => {let data = '3商品数据'iterator.next(data);},1000)}function * gen(){let one = yield user();console.log(one);let two = yield getOrder();console.log(two);let three = yield getGoods();console.log(three);}let iterator = gen();iterator.next();
</script>

2.5set集合

2.5.1集合介绍和api

<script>let s = new Set();console.log(s,typeof s);let s1 = new Set(['1','2','3','1'])//自带去重功能console.log(s1);//检测长度console.log(s1.size);//分割console.warn('');//新增s1.add('4');console.log(s1);//删除s1.delete('4');console.log(s1);//检测有没有当前元素console.log(s1.has('5'));//清空s1.clear();console.log(s1);
</script>

2.5.2集合基操

<script>var arr1 = [1,2,3,4,5,4,3,2,1];var arr2 = [3,4,5,8,9];//1.数组去重//不使用三个点转换为数组,这里得到的是一个对象let result1 = [...new Set(arr1)];console.log(result1);console.warn('-----------');//2.求arr1和arr2的交集//先去重减少空间复杂度// let result2 = [...new Set(arr1)].filter(item => {//   let s2 = new Set(arr2);//  if(s2.has(item)) return true;//     return false// })//简化19-23行代码let result2 = [...new Set(arr1)].filter(item => new Set(arr2).has(item));console.log(result2);console.warn('-----------');//3.求arr1和arr2并集   合并再去重let result3 = [...new Set([...arr1,...arr2])];console.log(result3);console.warn('-----------');//4.差集 arr1和arr2的差集就是在arr1里面有arr2里面没有的集合2//就是并集取反let result4 = [...new Set(arr1)].filter(item => !(new Set(arr2).has(item)));console.log(result4);
</script>

2.6map

2.6.1map介绍和api

<script>var m = new Map();//1.增加元素  键名,键值m.set('name','猴王');m.set('change',function(){console.log('猴王可以改变你~~~');});let obj = {address:'花果山'}//键名obj是一个对象,键值是一个数组m.set(obj,['水帘洞','白骨精','牛魔王'])console.log(m);console.warn('-------------------')//2.sizeconsole.log(m.size);//3.删除//console.log(m.delete('name'));//4.遍历for(let result of m ){console.warn(result);}//5.清空m.clear()console.log(m);
</script>

2.7Class类基操

2.7.1Class初体验

<script>//ES5前写法function HUAWEI(brand,price){//对实例对象做初始化this.brand=brand;this.price=price;}//添加方法HUAWEI.prototype.call = function(){console.log('我可以打电话');}let huawei = new HUAWEI('华为','5999');huawei.call();console.log(huawei);//Class写法class ONEPLUS{constructor(brand,price){this.brand=brand;this.price=price;}call(){console.log('我可以打电话');}}let oneplus = new ONEPLUS('1+','4999');console.log(oneplus);
</script>

2.7.2Class的静态成员介绍

<script>//实例对象和函数对象是不相通的function HUAWEI(){}//brand和price是属于函数对象的 这样的属性称之为静态成员HUAWEI.brand = '华为';HUAWEI.price = function(){console.log('我的价格是 5999');}HUAWEI.prototype.size = '6.72inch';let huawei = new HUAWEI();console.log(huawei.size); console.log(huawei.brand);//huawei.price();     //报错  实例对象访问不到函数对象的属性和方法class ONEPLUS{//静态属性static name='1+'price(){console.log('我的价格是 4999');}}let oneplus = new ONEPLUS();console.log(oneplus.name);console.log(ONEPLUS.name);oneplus.price()
</script>

2.7.3继承

<script type="text/javascript">class Person{constructor(age,sex){this.age = age;this.sex = sex;}call(){console.log('我会打人');}}class Son extends Person{constructor(age,sex,city){super(age,sex);this.city = city;}}let son = new Son('18','男','花果山');console.log(son);son.call();
</script>

2.7.4get和set

<script>class Houwang{get age(){console.log('我不知道我多少岁');return '18';}set city(value){console.log('我住'+value);}}let houwang = new Houwang();console.log(houwang.age);   //age属性的值就是方法的返回值houwang.city='花果山'
</script>

2.8数值扩展和对象扩展

2.8.1数值扩展

<script type="text/javascript">//1.Number.EPSILON//Number.EPSILON实际上是 JavaScript 能够表示的最小精度。误差如果小于这个值,//就可以认为已经没有意义了,即不存在误差了console.log('javascript中最小精度为:'+Number.EPSILON);function main(a,b){if(a-b < Number.EPSILON) return true;return false}console.log(0.1+0.2 == 0.3);console.log(main(0.1+0.2,0.3));console.warn('---------------------')//2.Number.isFinite  检测是不是一个有限数值console.log(Number.isFinite(100));console.log(Number.isFinite(100/0));console.log(Number.isFinite(Infinity)); //Infinity表示无穷console.warn('--------------------')//3.Number.isNaN  检测是不是一个NaNconsole.log(Number.isNaN(123));//4.Number.parseInt和Number.parseFloat截断字符串console.log(Number.parseInt('1314520love'));console.log(Number.parseFloat('3.1415926神奇数字'));console.warn('--------------------')//5.Number.isInteger判断是不是一个整数console.log(Number.isInteger(555));console.log(Number.isInteger(5.55));//6.Math.trunc抹掉小数部分console.log(Math.trunc(3.1415926));console.warn('--------------------')//7.Math.sign判断一个数是正数(1),零(0),负数(-1)console.log(Math.sign(100));console.log(Math.sign(0));console.log(Math.sign(-100));
</script>

2.8.2对象扩展

<script>//1.Object.is判断两个值是否相等console.log(Object.is(100,100));console.log(Object.is(NaN,NaN));console.log(NaN === NaN); //NaN与任何数值做比较都是falseconsole.warn('---------------');//2.Object.assign对象合并 有的属性后面那个覆盖前面那个let configOne = {url:'127.0.0.1',name:'root',user:'root',password:'123456',}let configTwo ={url:'localhost',user:'admin',password:'cqhg'}console.log(Object.assign(configOne,configTwo));console.warn('---------------');//3.Object.setPrototypeOf设置和获取原型 let objOne = {name:'猴王'}let objTwo = {city:'花果山'}//设置objOne的原型有objTwoObject.setPrototypeOf(objOne,objTwo);console.log(objOne);//获取console.log(Object.getPrototypeOf(objOne));
</script>

2.9模块化

2.9.1暴露数据三种方式


2.9.2导入数据三种方式


模块化

三、ES6

3.1bable模块化代码转换(解决兼容性问题)

1.初始化

npm init --yes

安装(-D开发依赖)

npm i babel-cli babel-preset-env browserify -D

2.代码转换(局部安装的命令前要使用npx)

//        原文件路径              (可选参数) 需要转换到的文件目录         (必加参数)
npx babel ES6/20模块化基操/20原文件js -d ES6/20模块化基操/21babel打包js --presets=babel-preset-env

3.打包

//注意路径
npx browserify ES6/20模块化基操/21babel打包js/20模块化基操app.js -o ES6/20模块化基操/21babel打包js/bundle.js

此时已经多了一个bundle.js文件

4.准备工作完成我们的代码已经能跑了

5.当我们修改了原文件app.js的内容需要重新进行转换和打包

四、ES7

4.1查找数组元素存在,和幂运算

<script type="text/javascript">//查找数组存在某元素不   跟indexOf有点儿类似var arr = ['猴王','猴子','猴儿'];console.log(arr.includes('猴王'));console.log(arr.includes('猴爸'));console.warn('-------');// **幂运算console.log(2**10);//Math的幂运算console.log(Math.pow(2,10));
</script>

五、ES8

5.1async和await

参见csdnPromise

5.2对象方法扩展

<script>var obj = {name:'houwang',arr:['猴王','猴子','猴儿']}//获取键名console.log(Object.keys(obj));//获取键值console.log(Object.values(obj));
</script>

<script>var obj = {name:'houwang',arr:['猴王','猴子','猴儿']}//返回的是一个数组,而每一个成员又是一个数组//数组第一个值是键名,第二个是键值console.log(Object.entries(obj));  //创建mapvar m = new Map(Object.entries(obj));console.log(m);console.log(m.get('name'));
</script>

<script>var obj = {name:'houwang',arr:['猴王','猴子','猴儿']}//对象属性的描述对象console.log(Object.getOwnPropertyDescriptors(obj));//                   第一个参数原型对象设置为null  第二个参数描述对象const objone = Object.create(null,{name:{//设置值value:'houwang',//属性特征writable:false,  ///是否可写configuarble:true, //是否可以删除enumerable:true  //是否可以枚举}})objone['name']="666"   //重写name值失败console.log(objone);
</script>

六、ES9

6.1rest参数

<script>function kk({name,password,...arr}){console.log(name);console.log(password);console.log(arr);}kk({name:'admin',password:'123456',type:'master',port:'3306',url:'localhost'})
</script>

6.2扩展运算符(对象的合并)

<script>var houzi = {q:'我可以偷桃子'}var houwang = {w:'我可以吃香蕉'}var houmu = {e:'我可以生猴子'}const huaguoshan = {...houzi,...houwang,...houmu};console.log(huaguoshan);
</script>

6.3正则扩展(捕获命名)

<script>let str = '<a href="www.baidu.com">百度</a>'//提取域名和文字      ?<变量名> .*通配符         \用于转义var reg = /<a href="(?<url>.*)">(?<wangzhi>.*)<\/a>/;const result = reg.exec(str);console.log(result);console.log(result.groups.url);
</script>

6.4正则扩展(反向断言:根据前后面的东西做唯一识别)

<script>var str = 'ffgf567快快快555没有了'//1.正向断言    取‘没有了’前面的数字var reg1 = /\d+(?=没有了)/;const result1 = reg1.exec(str);console.log(result1);//反向断言var reg2 = /(?<=快)\d+/;const result2 = reg2.exec(str)console.log(result2);
</script>

6.5正则扩展(dotAll模式)

<script>let str = `  <ul><li><a>铠甲勇士</a><p>上市时间:2012-10-15</p></li><li><a>刑天铠甲</a><p>上市时间:2013-08-30</p></li></ul>`;//dot  .  元字符  除了换行符以外的任意单个字符// 普及一哈:贪婪匹配多个,非贪婪带问号,匹配一个,//              ?防止贪婪          模式修正符g全局匹配    模式修正符s,.将匹配任意字符var reg = /<li>.*?<a>(.*?)<\/a>.*?<p>(.*?)<\/p>/gs//循环处理将数据保存好let data = [];let result;while(result = reg.exec(str)){console.log(result);data.push({title:result[1],time:result[2]});}console.log(data);
</script>

七、ES10

7.1对象扩展方法(二维数组转化为对象)

<script>var arr = [['name','猴王,猴子,猴儿'],['number','1,2,3']];console.log(arr);let result1 = Object.fromEntries(arr)console.log(result1);var m = new Map();m.set('name','猴王');console.log(m);let result2 = Object.fromEntries(m)console.log(result2);
</script>

<script>//ES8对象转换为二维数组const arr = Object.entries({name:'猴王,猴子',city:'花果山'})console.log(arr);
</script>

7.2字符串扩展方法(清除左右空格)

<script>let arr = '     5201314     'console.warn(arr);console.log(arr.trim());   //左右console.log(arr.trimEnd());  //右console.log(arr.trimStart());  //左
</script>

7.3数组扩展方法(维度降低)

<script>//1.flat多维数组转换为一维数组let arrOne = [1,2,3,4,[5,6]];  //二位数组console.log(arrOne);//数字1表示深度console.log(arrOne.flat(1));let arrTwo = [1,2,3,4,[5,6,[7,8,9]]];  //三位数组//数字2表示深度console.log(arrTwo.flat(2));console.warn('------------')//2.flatmaplet arrThree = [1,2,3,4];let result1 = arrThree.map(item => [item * 10])   console.log(result1);  //这里得到是一个二维数组//相当于flat和map的操作结合let result2 = arrThree.flatMap(item => [item * 10])console.log(result2);
</script>

7.4获取Symbol描述字符串

<script>var m = Symbol('猴王')console.log(m.description);
</script>

八、ES11

8.1私有属性

<script>//私有属性只可以在类内部可以访问   其他地方访问不了class Gril{//公有属性name;//私有属性#age;#naizi;constructor(name,age,naizi){this.name = name;this.#age = age;this.#naizi = naizi;}intro(){console.log(gril.name);       console.log(gril.#age);     console.log(gril.#naizi);   }}let gril = new Gril('小鑫',20,'C');gril.intro();// console.log(gril.name);     //正常访问// console.log(gril.#age);        //直接报错// console.log(gril.#naizi);      //直接报错
</script>

8.2Promise.allSeetled()

<script>//1.返回的结果始终是成功的   成功的值是Promise对象和状态const p1 = new Promise((resolve,reject) => {setTimeout(() => {resolve('成功')},1000)})const p2 = new Promise((resolve,reject) => {setTimeout(() => {reject('失败')},1000)})const result = Promise.allSettled([p1,p2]);console.log(result);
</script>

8.3字符串扩展(数据批量提取)

<script>let str = `  <ul><li><a>铠甲勇士</a><p>上市时间:2012-10-15</p></li><li><a>刑天铠甲</a><p>上市时间:2013-08-30</p></li></ul>`;var reg = /<li>.*?<a>(.*?)<\/a>.*?<p>(.*?)<\/p>/gsconst result = str.matchAll(reg);console.log(result);// //两种方法均可console.log([...result]);// for(let v of result){//   console.log(v);// }
</script>

8.4可选链操作符

<script>function main(config){//以前的写法//const result = config && config.db && config.db.url;const result = config?.db?.url;console.log(result);}main({db:{user:'root',url:'127.0.0.1'}})
</script>

8.5动态import

8.6Bigint类型(超大数值运算)

<script>let  n  =  521n;console.log(n,typeof(n));let n1 = 88;console.log(BigInt(n1));//js能运算的最大数值let max = Number.MAX_SAFE_INTEGER;console.warn(max);console.log(max+1);console.log(max+10000+'运算错误的');//无效果console.log(BigInt(max)+BigInt(10000));
</script>

学习ES6-11的第一天相关推荐

  1. 通过这个免费的,由23部分组成的互动课程,学习ES6 +

    JavaScript is undoubtedly one of the most popular programming languages in the world. It's used almo ...

  2. Hadoop学习笔记—11.MapReduce中的排序和分组

    Hadoop学习笔记-11.MapReduce中的排序和分组 一.写在之前的 1.1 回顾Map阶段四大步骤 首先,我们回顾一下在MapReduce中,排序和分组在哪里被执行: 从上图中可以清楚地看出 ...

  3. HALCON 20.11:深度学习笔记(11)---目标检测

    HALCON 20.11:深度学习笔记(11)---目标检测 HALCON 20.11.0.0中,实现了深度学习方法. 本章讲解了如何使用基于深度学习的对象检测. 通过对象检测,我们希望在图像中找到不 ...

  4. Python|线程和进程|阻塞|非阻塞|同步|异步|生成器和协程|资源竞争|进程间通信|aiohttp库|daemon属性值详解|语言基础50课:学习(11)

    文章目录 系列目录 原项目地址 第34课:Python中的并发编程-1 线程和进程 多线程编程 使用 Thread 类创建线程对象 继承 Thread 类自定义线程 使用线程池 守护线程 资源竞争 G ...

  5. 狂神学习系列11:SpringBoot

    狂神学习系列11:SpringBoot 声明: 本文章是基于狂神的课程所编写,本人才疏学浅,内容仅作参考 项目和markdown文件资料: 07_SpringBoot: 基于狂神说SpringBoot ...

  6. 学习ES6 The Dope Way Part I:const,let&var

    by Mariya Diminsky 通过玛丽亚·迪明斯基(Mariya Diminsky) 学习ES6 The Dope Way Part I:const,let&var (Learn ES ...

  7. Java学习第七天 ———— 第一周学习汇总(粗略)

    Java学习第七天 ---- 第一周学习汇总 第一章Java Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大 ...

  8. 点云学习笔记11——VoxelNet算法+代码运行

    点云学习笔记11--VoxelNet算法+代码运行 一.算法分析 摘要 介绍 相关工作 1.2. 贡献 2.VoxelNet 2.1.特征学习网络 2.1.1 特征学习网络 二.代码复现 2.1.环境 ...

  9. 【ES6 教程】第一章 新的ES6语法04—如何设置函数参数的默认值

    英文 | https://www.javascripttutorial.net 翻译 | 杨小爱 在本节教程中,我们将学习如何在 ES6 中处理 JavaScript 默认参数. TL;DR func ...

  10. 【ES6 教程】第一章 新的ES6语法03—使用const 关键字定义常量

    英文 | https://www.javascripttutorial.net 翻译 | 杨小爱 在本教程中,我们将学习如何使用 JavaScript const 关键字定义常量. JavaScrip ...

最新文章

  1. DG8SAQ 矢量网络分析
  2. TCP/IP 知识点问答(三)
  3. javamail发送邮件的简单实例[转]
  4. boost::type_erasure::add_assignable相关的测试程序
  5. Django从理论到实战(part15)--自定义path转换器
  6. 转:FileReader详解与实例---读取并显示图像文件
  7. 在你的Android上执行Linux命令
  8. VB6.0基于ADO连接access踩坑之数据库不显示数据
  9. 学习笔记(10):每一道试题都是有解题密码(2018年下半年信息系统项目管理师试题讲解)-用这种简单方法破解这么难的试题,我也是醉了(试题21-25)...
  10. Linux基础(三)
  11. 多媒体一体机计算机打不开,多媒体教学一体机突然打不开PPT是怎么回事?
  12. 下列哪个不是python的第三方库_以下选项中,不是 Python 中用于开发用户界面的第三方库是()...
  13. 磨砂服务器波特率修改,MOXA串口服务器产品配置说明 附图.doc
  14. Java综合练习小项目——快递柜
  15. 好朋友结婚了,祝福你们!
  16. LaTex 的图片插入
  17. SNMP 协议RFC
  18. 清览题库--C语言程序设计第五版编程题解析(3)
  19. Excel2007使用SQL语句
  20. unity 音乐小游戏

热门文章

  1. 洛谷P1827 美国血统
  2. css为图片添加一层蒙版
  3. Java别在使用普通的照片上传了,你可以使用开源的minio实现图片的上传,方便又简单
  4. CSP-S2022 一轮游
  5. AIGC 语言大模型研究报告
  6. CTF 隐写工具Steghide
  7. 计算机基础教学改革申报书,计算机应用基础精品课程申报书_图文
  8. 基于大华SDK的二次开发,用于网络摄像头图像的实时显示和捕获(附源码)
  9. 【SystemVerilog基础】program块的automatic与static深入探究
  10. golang带TZ的格林威治时间字符串转时间格式