ES7与ES8特性

news/2023/11/29 7:33:58

我曾写过一篇关于ES6博客《10个最佳ES6特性》,这次我打算聊聊ES7ES8特性。

ES7只有2个特性:

  • includes()
  • 指数操作符

ES8尚未发布(2017年1月),下面是它已经完成起草的一些特性:

  • Object.values()
  • Object.entries()
  • padStart()
  • padEnd()
  • Object.getOwnPropertyDescriptors()
  • 函数参数列表结尾允许逗号
  • Async/Await

Array.prototype.includes()

不使用ES7

使用indexOf()验证数组中是否存在某个元素,这时需要根据返回值是否为-1来判断:

let arr = ['react', 'angular', 'vue'];if (arr.indexOf('react') !== -1)
{console.log('React存在');
}

使用ES7

使用includes()验证数组中是否存在某个元素,这样更加直观简单:

let arr = ['react', 'angular', 'vue'];if (arr.includes('react'))
{console.log('React存在');
}

指数操作符

不使用ES7

使用自定义的递归函数calculateExponent或者Math.pow()进行指数运算:

function calculateExponent(base, exponent)
{if (exponent === 1){return base;}else{return base * calculateExponent(base, exponent - 1);}
}console.log(calculateExponent(7, 3)); // 输出343
console.log(Math.pow(7, 3)); // 输出343

使用ES7

使用指数运算符**,就像+-等操作符一样:

console.log(7**3);

Object.values()

不使用ES8

使用Object.keys()遍历对象的属性值,需要通过属性名key去获取属性值:

let obj = {a: 1, b: 2, c: 3};Object.keys(obj).forEach((key) =>
{console.log(obj[key]); // 输出1, 2, 3
});

使用ES8

使用Object.values()遍历对象的属性值,无需使用使用属性名:

let obj = {a: 1, b: 2, c: 3}
Object.values(obj).forEach(value =>
{console.log(value); // 输出1, 2, 3
});

Object.entries()

不使用ES8

使用Object.keys()遍历对象的属性名和属性值:

let obj = {a: 1, b: 2, c: 3};Object.keys(obj).forEach((key) =>
{console.log(key + ": " + obj[key]); // 输出a: 1, b: 2, c: 3
})

使用ES8

使用Object.entries()遍历对象的属性名和属性值:

let obj = {a: 1, b: 2, c: 3};Object.entries(obj).forEach(([key, value]) =>
{console.log(key + ": " + value); // 输出a: 1, b: 2, c: 3
})

padStart()

不使用ES8

console.log('0.00')         	
console.log('10,000.00')    
console.log('250,000.00')

输出结果如下:

0.00
10,000.00
250,000.00

使用ES8

使用padStart()可以在字符串前面填充指定的字符串:

console.log('0.00'.padStart(20))         	
console.log('10,000.00'.padStart(20))    
console.log('250,000.00'.padStart(20))

输出结果如下:

0.0010,000.00
250,000.00

padEnd()

不使用ES8

console.log('0.00 ' + '0.00' )         	
console.log('10,000.00 ' + '10,000.00' )    
console.log('250,000.00 ' + '250,000.00')

输出如下:

0.00 0.00
10,000.00 10,000.00
250,000.00 250,000.00

使用ES8

使用padEnd()可以在字符串后面填充指定的字符串:

console.log('0.00'.padEnd(20) + '0.00' )         	
console.log('10,000.00'.padEnd(20) + '10,000.00' )    
console.log('250,000.00'.padEnd(20) + '250,000.00')

输出如下:

0.00                0.00
10,000.00           10,000.00
250,000.00          250,000.00

Object.getOwnPropertyDescriptors()

azatsBooks对象的定义如下:

let azatsBooks = {books: ['React Quickly'],get latest(){let numberOfBooks = this.books.length;if (numberOfBooks == 0) return undefined;return this.books[numberOfBooks - 1];}
};

不使用ES8

使用Object.getOwnPropertyDescriptor()获取单个属性的属性描述符。

获取azatsBooks对象的books属性的属性描述符:

console.log(Object.getOwnPropertyDescriptor(azatsBooks, 'books'));/** 输出books属性的属性描述
[object Object] {configurable: true,enumerable: true,value: ["React Quickly"],writable: true
}
**/

获取azatsBooks对象的lastest方法的属性描述符:

console.log(Object.getOwnPropertyDescriptor(azatsBooks, 'latest'));/** 输出lastest方法的属性描述
[object Object] {configurable: true,enumerable: true,get: function get latest() {let numberOfBooks = this.books.lengthif (numberOfBooks == 0) return undefinedreturn this.books[numberOfBooks - 1]},set: undefined
}
**/

使用ES8

Object.getOwnPropertyDescriptors()相当于Object.getOwnPropertyDescriptor()的复数形式,可以获取对象的所有自身属性的描述符:

console.log(Object.getOwnPropertyDescriptors(azatsBooks))/** 输出azatsBooks对象所有自身属性的属性描述
[object Object] {books: [object Object] {configurable: true,enumerable: true,value: ["React Quickly"],writable: true},latest: [object Object] {configurable: true,enumerable: true,get: function get latest() {let numberOfBooks = this.books.lengthif (numberOfBooks == 0) return undefinedreturn this.books[numberOfBooks - 1]},set: undefined}
}
**/

函数参数列表结尾允许逗号

不使用ES8

var f = function(a,b,c,d // d之后不能带逗号) { console.log(d)
}

使用ES8

var f = function(a,b,c,d, // d之后允许带逗号
) { console.log(d)
}

允许逗号之后,可以避免一些不必要的报错。(如果你希望实时监控JavaScript应用的错误,欢迎免费使用Fundebug)

Async/Await

使用Promise

使用Promise写异步代码,会比较麻烦:

axios.get(`/q?query=${query}`).then(response => response.data).then(data =>{this.props.processfetchedData(data);}).catch(error => console.log(error));

使用Async/Await

Async/Await使得异步代码看起来像同步代码,这正是它的魔力所在:

async fetchData(query) =>
{try{const response = await axios.get(`/q?query=${query}`);const data = response.data;return data;}catch (error){console.log(error)}
}fetchData(query).then(data =>
{this.props.processfetchedData(data)
})

Async/Await是写异步代码的新方式,以前的方法有回调函数Promise。相比于Promise,它更加简洁,并且处理错误、条件语句、中间值都更加方便,因此有望替代Promise,成为新一代的一步代码编写方式。对细节感兴趣的话,可以查看Fundebug翻译的《Async/Await替代Promise的6个理由》。



http://www.ppmy.cn/news/131427.html

相关文章

ES7, ES8

文章目录 前言一、ES7(一) includes() 二、ES8(一)Object.values()1. 意义:遍历对象对的属性值,需要通过属性名key去获取属性值2. 例如:-->ES8前-->ES8后 (二)Obje…

Elasticsearch:使用标准 Java HTTP 的集成 - Elastic Stack 8.x

Elasticsearch 功能可以通过多种方式轻松集成到任何 Java 应用程序中,通过 REST API 或通过本机 API。 在 Java 中,很容易使用许多可用库之一调用 REST HTTP 接口,例如 Apache HttpComponents 客户端(有关更多信息,请参…

ES6, ES7, ES8, ES9 以及 ES10 新特征

目录 1. ES6 新特征 (2015) 1.1 module 1.1.1 export 1.1.2 import 1.2 Arrow function (箭头函数) 1.2.1 箭头函数结构 1.3 默认参数 1.4 模板字符串 1.5. 解构赋值 1.5.1数组的结构赋值 1.5.2 对象解构赋值 1.6 扩展运算符 1.7Promise(异步) 2 ES7新特征 (2016…

【ES】elasticsearch常见报错(服务端)

elasticsearch常见报错 _search 操作响应错误Cannot search on field [xxxxx] since it is not indexed.unknown type for collapse field ‘xxx’, only keywords and numbers are accepted _search 操作响应错误 Cannot search on field [xxxxx] since it is not indexed. …

ES新语法ES7、ES8、ES9、ES10新特性

ES7新特性 1.Array.prototype.includes()方法 //直观判断数组中是否包含一个元素,,如果包含则返回true,否则返回false。 const arr [1, 3, 5, 2, 8, NaN, -0] arr.includes(1) // true arr.includes(1, 2) // false 该方法的第二个参数表示搜索的起始…

ES6、ES7、ES8、ES9、ES10、ES11

目录 一、ES6 二、ES7 三、ES8 四、ES9 一、ES6 点击跳转 二、ES7 1.Includes方法:检测数组是否包含某个元素,返回布尔值 const mingzhu [西游记, 红楼梦, 三国演义, 水浒传]; console.log(mingzhu.includes(西游记)); // true console.log(min…

android系统能内存卡,手机SD卡可以作为内置存储吗? 安卓6.0将支持microSD卡作为内置存储...

过去不少厂商为了引导用户选择存储空间更大更昂贵的机型,纷纷取消了外置存储卡的功能。然而大部分用户自始至终都更青睐支持外置存储卡的手机,这也迫使手机厂商调整策略。现在就连一向排斥外置存储卡的谷歌也在安卓6.0中加入了将外置存储卡作为内置存储的…

linux检测扩容卡,TF内存卡是不是扩容卡准确质量检测

如果你花了很少的钱买了一个非常大容量的内存卡,那么就要小心了,你可能买到的是一个扩容的内存卡,所谓扩容就是说容量的虚拟的,真实容量可能只有一成不到,比如64G的内存卡,实际容量可能只有4G,那…

linux检测扩容卡,教你检测SD卡内存卡是否被扩容过的方法

新购买一个便宜的内存卡,使用一段时间后,发现不能存东西了,或者不能再读了,怎么回事呢?其实发生这些问题就是SD卡内存卡烧了。其实很多人购买便宜内存卡多半是扩容的,实际容量不到标称容量的1/4。那么如何检…

android 手机存储位置设置,如何将红米手机外置SD卡设定为默认存储

在国产机中,小米的地位越来越具优势,低价高配已经成为了小米手机的代言词,799元的红米手机最能说明问题,红米手机已经销售了有一段时间了,随之而来的一些小问题让用户有些头疼,其中包括无法将外置SD卡设定为…

手机闪存速度排行_手机很卡可能是只是因为闪存颗粒太差 EMMC UFS大对比

原标题:手机很卡可能是只是因为闪存颗粒太差 EMMC UFS大对比 在经历了华为的“闪存门”事件以后,人们都开始关注关于手机内存的相关知识。那么所谓的EMMC和UFC到底有什么差别,那一个更好一些呢?接下来我们将仔细讲解。 大众了解到…

用计算机读取机读卡信息,摄像机SD卡无法读取怎么办

一般用摄像机摄像的时候都是在发生比较有纪念意义的事情的时候,但是摄像完后把SD数据拷出来,却发现SD卡不能读取了,怎么办?相信,如果遇到这个问题的网友一定会急的像热锅上的蚂蚁。下面我们就来讨论下如果遇到这种问题了的解决办法。 先确认是SD卡的问题还是摄像机的问题。…

苹果电脑更改sd卡只读_SD内存卡禁止写入只读怎么办?另类SPI模式修复坏卡

这几天很郁闷,买的32G TF卡老出问题,三星的标,不知道是不是正品,标称C10,且不说是不是真的三星和真的C10,反正测试一下容量倒是真的,价格么也比较亲民,好像是69块? 哎,可惜呀,好景不长,坏了,变只读了。 这卡一直放老婆手机里用,上周突然手机不正常了,各种怪异…

适合手机运行的服务器系统,同样2GB内存 手机为啥不如电脑运行好?

电子设备流畅的运行,直接影响到用户的应用体验,应用体验是一个新兴的概念,但却是衡量电子设备优劣的一个重要指标,对电子产品的购买产生着直接的影响。 影响电子设备应用体验最直接因素就是硬件配置,相同的配置也有可能有不同的应用体验。在ZOL官方论坛中,就有多个网友提…

android+复制大文件,手机SD卡无法复制拷贝大文件的解决方法

现在的SD存储卡越来越便宜了,一个32G的价格在去年只能买到16G的,所以很多朋友都上了32G甚至更大的卡。但是很囧的情况发生了,这么大的存储卡居然不能复制大文件,相信很多朋友都碰到过这种囧事吧,还以为是SD卡的问题,其实吧,就是SD卡的问题,不过可能不是质量问题,而是它…

电脑tf卡检测不到_内存卡在电脑上读不出来怎么办 内存卡在电脑上读不出来解决方法【详细介绍】...

在如今科技产品众多的信息时代里,内存卡对于我们而言并不陌生。内存卡一般多用于手机、电脑、相机等产品上所能够独立存储的介质。不仅具有很好的兼容性,而且在不同的数码产品之间可以进行数据的交换。随着使用时间的增加,以及我们偶尔的操作不对加上内存卡本身的质量问题,…

root卡顿解决方法,手机root后很卡

手机root后屏卡顿 相机卡屏 系统更新出错,求解 楼主你好! 下面的流程是手机root后屏卡顿相机卡屏系统更新出错的解决方法! 1、如果用一些软件root之后已经造成了卡顿及掉相机问题,可以使用RE文件管理器先删除 /system/app 下的授权…

华为手机照片在电脑上显示计算机内存不足,关于华为荣耀手机提示内存不足的解决方法...

关于华为荣耀手机提示内存不足的解决方法 如果有条件或者可以升级的朋友,可以讲手机内存升级更大一些,目前主流手机内存已经达到了1GB,高端手机内存可达到2GB,对于高端手机一般由于手机内存较大,一般比较少出现手机内存…

youtube 视频下载

有几种方式可以下载 YouTube 视频: 使用第三方 YouTube 视频下载网站: 这种方式简单方便,但下载视频质量和格式受限,也可能涉及版权问题。常用的网站有: y2mate:https://y2mate.com/savefrom:https://www.savefrom.net/flvto:https://www.flvto.biz/ 在这些网站输入视频 URL …

POJ3669Meteor Shower java

折腾了半天,没想到是在建地图的时候,只考虑到了落点周围的点保留最小时间,没有考虑落点本身。 ┭┮﹏┭┮ import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class POJ_366…
最新文章