热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

前端基础(三)ES7~ES12

为了方便记忆和称呼,ES2015之后的新知识点我们都统称ES6语法,就没必要去划分得那么细ES7(2016)Array.p

为了方便记忆和称呼,ES2015之后的新知识点我们都统称ES6语法,就没必要去划分得那么细



ES7(2016)

Array.prototype.includes()


includes方法可以判断一个数组是否包含某个指定的值,如果存在返回true,否则false


const arr = ["es6", "es7", "es8", "es9"];console.log(arr.includes("es5")); // falseconsole.log(arr.includes("es6")); // trueconsole.log(arr.includes("es6", 0)); // trueconsole.log(arr.includes("es6", 1)); // falseconsole.log(arr.includes("es6", -1)); // falseconsole.log(arr.includes("es6", -2)); // falseconsole.log(arr.includes("es6", -3)); // falseconsole.log(arr.includes("es6", -4)); // trueconsole.log(arr.includes("es6", -5)); // true/*arr.includes(valueFind,IndexFind)valueFind,想要查询的值includes的第二项参数为可选参数,即从IndexFind处开始查找,如果IndexFind为负数,则从末尾开始往前跳IndexFind绝对值个位置,然后开始往后找*/

注意:includes()方法只能用于判断基本数据类型,如果是复杂数据类型,如对象,二维数组,则无法判断,并且能够判断NaN,null,undefined:

const arr1 = [1, 2, [3, 4], 5, { name: "lucy" }, NaN, null, undefined];console.log(arr1.includes([3, 4])); //falseconsole.log(arr1.includes({ name: "lucy" })); //falseconsole.log(arr1.includes(NaN)); //trueconsole.log(arr1.includes(null)); //trueconsole.log(arr1.includes(undefined)); //true

幂运算符 **
以前可以:

Math.pow(2,10);// 1024

现在可以:

console.log(2 ** 10);// 1024

两个**是连在一起的


ES8(2017)

Object.values()


该方法会返回一个数组,其成员是参数对象自身可遍历属性键值


const obj = {name: "lucy",age: 12,sex: "male",};console.log(Object.values(obj)); //['lucy', 12, 'male']

Object.entries()


该方法返回一个数组,其成员是对象自身的可遍历属性的键值对数组


const obj = {name: "lucy",age: 12,sex: "male",};console.log(Object.entries(obj)); // [['name', 'lucy'],['age', 12],['sex', 'male']]

String.prototype.padStart()


该方法可以把指定字符串添加到字符串头部,并返回一个新的字符串


// /**// * str.padStart(targetLen,padStr)// * targetLen,当前字符串希望被填充到的目标长度,如果targetLen小于当前字符串长度,则返回当前字符串本身// * padStr,用来填充的字符串,可选参数,如果padStr太长,填充后的字符串长度超过了目标长度,则会被截断,保留左侧部分// * /const str = "abc";console.log(str.padStart(5)); // " abc"console.log(str.padStart(5, "d")); // "ddabc" 把d填充到字符串前面,并且目标字符串长度为5console.log(str.padStart(5, "123456")); //"12abc" 把123456填充到字符串前面,目标字符串长度为5,填充后目标字符串太长,自动截断console.log(str.padStart(1)); // "abc" 空字符串填充,目标字符串长度为1,小于原字符串,返回原字符串

String.prototype.padEnd()


该方法可以把指定字符串添加到字符串末尾,并返回一个新的字符串,语法同上


const str = "abc";console.log(str.padEnd(5)); // "abc "console.log(str.padEnd(5, "d")); // "abcdd" 把d填充到字符串后面,并且目标字符串长度为5console.log(str.padEnd(5, "123456")); //"abc12" 把123456填充到字符串后面,目标字符串长度为5,填充后目标字符串太长,自动截断console.log(str.padEnd(1)); // "abc" 空字符串填充,目标字符串长度为1,小于原字符串,返回原字符串

ES9(2018)

for await of
异步迭代器,可以循环等待每一个promise对象变为resolved状态才会进行到下一步。

function fTimeOut(times) {return new Promise((resolve, reject) => {setTimeout(() => {resolve(times);}, times);});}const arr = [fTimeOut(1000), fTimeOut(2000)];for (const item of arr) {console.log(Date.now(), item.then(console.log));}

在这里插入图片描述


这里可以看出,for。。。of并没有能够对异步迭代做一个遍历,它是先得到了结果,然后才执行的FTimeOut函数
我们换个写法:


function fTimeOut(times) {return new Promise((resolve, reject) => {setTimeout(() => {resolve(times);}, times);});}async function timeTest() {const arr = [fTimeOut(1000), fTimeOut(2000)];for await (const item of arr) {console.log(Date.now(), item);}}timeTest();

看看结果:
在这里插入图片描述


for await of 会等待每个Promise对象变为resolved状态才会进行下一步



ES10(2019)

Object.fromEntries():把键值对列表转换成一个对象

const arr = [["a", "hello"],["b", "world"],];console.log(Object.fromEntries(arr));//{a: 'hello', b: 'world'}

是和Object.entries()对应的操作
String.prototype.trimStart():删除字符串开头的空格
String.prototype.trimEnd() :删除字符串结尾的空格

try…catch异常可选


在ES10之前catch的err参数是必须的,ES10之后可以省略这个参数


try {console.log("ok");} catch {console.log("error");}

JSON.Stringify增强
ES10中修复了一下对于JSON.stringify在展示一些超范围的Unicode编码时错误的问题。

// "\uD83D\uDE0E" 多字节字符console.log(JSON.stringify("\uD83D\uDE0E"));//"😎"console.log(JSON.stringify("\uD83D"));//"\ud83d" 这是一个无效的字符串,以前会替换为特殊字符,现在转义为JSON转义序列

ES11(2020)

空值合并运算符(??)


当左侧操作数为undefined或者null时,返回右侧操作数,否则返回左侧操作数


const str1 = undefined ?? "right";const str2 = null ?? "right";const str3 = "left" ?? "right";console.log(str1); // rightconsole.log(str2); // rightconsole.log(str3); // left

对比逻辑或操作符(||): 逻辑或在左侧操作符为假时返回右侧操作数,但是对于(’’,0,NaN,false),均为假,返回右侧操作数
可选链操作符(?.)
可选链操作符允许获取位于连接对象深处的属性值,不必明确验证链中的每个引用是否有效,该操作符类似于’.'操作符,但是在引用null或者undefined时不会引起错误,形式上也更加简洁


const obj = {a: {sec: {b: "hello world",},},};const str1 = obj && obj.a && obj.a.sec && obj.a.sec.b;const str2 = obj?.a?.sec?.b;console.log(str1); // hello worldconsole.log(str2); // hello world

note:不能用于赋值

const obj = {}obj?.a = 1 //Uncaught SyntaxError: Invalid left-hand side in assignment

ES12(2021)

逻辑运算符与赋值表达式(&&=,||=,??=)


  • 逻辑与赋值(&&=)

let a = 1;let b = 2;a &&= b;console.log(a); // 2 相当于 a && (a = b)

  • 逻辑或赋值(||=)

let a = 1;let b = 2;let c = false;a ||= b;c ||= b;console.log(a, c); // 1 2 相当于a || (a = b)

  • 逻辑空赋值(??=)

let a = 1;let b = 2;let c = false;let d = null;let e = undefined;a ??= b;c ??= b;d ??= b;e ??= b;console.log(a, c, d, e); // 1 false 2 2 相当于a ?? (a = b)

数字分割符“_”

console.log(123456789); // 123456789console.log(123_456_789); // 123456789

note:以下情况报错


  • 放在数值最前面或者最后面
  • 两个或以上分隔符放在一起
  • 小数点前后
  • 科学计数法中,表示指数的e(E)前后

3._14159263_.14153_e143e_14123__456_123456123456_

推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • React项目中运用React技巧解决实际问题的总结
    本文总结了在React项目中如何运用React技巧解决一些实际问题,包括取消请求和页面卸载的关联,利用useEffect和AbortController等技术实现请求的取消。文章中的代码是简化后的例子,但思想是相通的。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
author-avatar
热情article文章_673_621
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有