网站建设 之 JavaScript 版本

ECMAScript 是 JavaScript 语言的国际标准,JavaScript 是 ECMAScript 的实现。

ES5

于 2009 年完成标准化。这个规范在所有现代浏览器中都相当完全的实现了。作为ECMAScript第五个版本(第四版因为过于复杂废弃了),增加特性如下:

1. strict模式

严格模式,限制一些用法,'use strict';例如不声明变量就使用。

2. Array增加方法

增加了every、some 、forEach、filter 、indexOf、lastIndexOf、isArray、map、reduce、reduceRight方法。还有其他方法 Function.prototype.bind、String.prototype.trim、Date.now。

3. Object方法

Object.getPrototypeOf,Object.create,Object.getOwnPropertyNames,Object.defineProperty,Object.getOwnPropertyDescriptor,Object.defineProperties,Object.keys,Object.preventExtensions / Object.isExtensible,Object.seal / Object.isSealed,Object.freeze / Object.isFrozen。

ES6

因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015。也就是说,ES6就是ES2015。目前并不是所有浏览器都能兼容ES6全部特性,往往用babel转化成es5。

1. 块级作用域

关键字let, 常量const。

2. 对象字面量的属性赋值简写

如果一个变量名恰好是一个实例的参数,就可以直接写进去不用 key: value 格式。

3. 赋值解构

代码块

let { first: f, last: l } = singer;

4. 函数参数 - 默认值、参数打包、 数组展开(Default 、Rest 、Spread)

代码块

//Default 默认值
function findPerson(name='lu', age='26') {
    ...
}
//Rest 参数打包
function f(x, ...y) {
  // y is an Array
  return x * y.length;
}
f(3, "hello", true) == 6
 
//Spread 数组展开
function f(x, y, z) {
  return x + y + z;
}
// Pass each elem of array as argument
f(...[1,2,3]) == 6

5. 箭头函数 Arrow functions

(1).简化了代码形式,默认return表达式结果。

(2).自动绑定语义this,即定义函数时的this。

6. 字符串模板 Template strings

代码块

 
var name = "Bob", time = "today";
`Hello ${name}, how are you ${time}?`
// return "Hello Bob, how are you today?"

7. Iterators(迭代器)+ for..of

迭代器有个next方法,调用会返回:

(1).返回迭代对象的一个元素:{ done: false, value: elem }

(2).如果已到迭代对象的末端:{ done: true, value: retVal }

代码块

 
for (var n of ['a','b','c']) {
  console.log(n);
}
// 打印a、b、c

8. 生成器 (Generators)

9. Class

Class,有constructor、extends、super,但本质上是语法糖(对语言的功能并没有影响,但是更方便程序员使用)。

10. Modules

ES6的内置模块功能借鉴了CommonJS和AMD各自的优点:

(1).具有CommonJS的精简语法、唯一导出出口(single exports)和循环依赖(cyclic dependencies)的特点。

(2).类似AMD,支持异步加载和可配置的模块加载。

11. Map + Set + WeakMap + WeakSet

四种集合类型,WeakMap、WeakSet作为属性键的对象如果没有别的变量在引用它们,则会被回收释放掉。

12. Math + Number + String + Array + Object APIs

13. Proxies

使用代理(Proxy)监听对象的操作,然后可以做一些相应事情。

14. Symbols

Symbol是一种基本类型。Symbol 通过调用symbol函数产生,它接收一个可选的名字参数,该函数返回的symbol是唯一的。

15. Promises

Promises是处理异步操作的对象,使用了 Promise 对象之后可以用一种链式调用的方式来组织代码,让代码更加直观(类似jQuery的deferred 对象)。

ES7

es7(es2016)只有两个特性:

1.Array.prototype.includes:

includes() 方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回false。

2.求幂运算符**

用于取代以前的求幂方法 Math。

ES8

1.Object.values()

Object.values()方法返回一个给定对象自身的所有可枚举属性值的数组,值的顺序与使用for...in循环的顺序相同:即任意序 ( 区别在于 for-in 循环枚举原型链中的属性 )。
与Object.keys对应,一个是key,一个是值。

2.Object.entries()

Object.keys和Object.values的结合体,方法返回一个给定对象自身可枚举属性的键值对数组,也是任意序遍历,数组的每一项为[key, value]。

3.String padding

String增加了两个实例方法 — padStart和 padEnd,这两个方法可以在字符串的首/尾添加其他字符串,类似数组的unshift,push方法

4.Object.getOwnPropertyDescriptors

Object.getOwnPropertyDescriptor() 方法返回指定对象上一个自有属性对应的属性描述符。

5.Trailing commas in function

JavaScript 一开始就支持数组字面值中的尾后逗号,随后向对象字面值(ECMAScript 5)中添加了尾后逗号。ES8 标准中允许函数参数列表与调用中的尾部逗号,该特性允许我们在定义或者调用函数时添加尾部逗号。但是 JSON 不支持尾后逗号。

6.Async functions

为解决异步调用引入的 async 函数,由于 Babel 和 Nodejs 很早就支持 async 和 await 关键字,所以这里不做过多解释。

7.SharedArrayBuffer和 Atomics

SharedArrayBuffer 和 Atomics 是 JavaScript 为多线程能力增加的特性,暂时使用的场景不多。目前也有一定的安全问题。

ES9(ES2018)

1.对象上的Rest/Spread属性

2.异步iterator和异步iterables

与iterator不同,异步iterator的next()方法返回一个包含{ value, done }的promise。

3.for-await-of

es2018提供了新的遍历语法对异步 iterator 进行遍历。

4.Promise.prototype.finally()

Promise.prototype.finally()方法返回一个Promise,在promise执行结束时,无论结果是fulfilled或者是rejected,在执行then()和catch()后,都会执行finally指定的回调函数。这为指定执行完promise后,无论结果是fulfilled还是rejected都需要执行的代码提供了一种方式,避免同样的语句需要在then()和catch()中各写一次的情况。

5.标记模板

带标签的模板字符串是一种更高级的形式的模板字符串。标签使可以用函数解析模板字符串。标签函数的第一个参数包含一个字符串值的数组。其余的参数与表达式相关。最后,你的函数可以返回处理好的的字符串。用于该标签的函数的名称可以被命名为任何名字。这个离谱啊

6.正则相关的特性

ES10(ES2019)

1.可选的catch参数

ES2018中catch在没使用参数的情况下可以省略括号

2.JSON 超集

当json文本中存在未转义的换行符如\u2028,\u2029时,js中会报语法错误。ES2018中对此作了扩展,支持了所有的json文本,因此同样允许未转义的换行符的存在。

3.Symbol.prototype.description

Symbol对象添加了一个只读属性description,它会返回Symbol对象的可选描述的字符串。而在ES2019之前,Symbol 的描述存储在内部的 [[Description]],没有直接对外暴露,只有调用 Symbol 的 toString()才能读取到。

4.Function.prototype.toString revision

Function.prototype.toString()现在返回精确字符,包括空格和注释。

5.Object.fromEntries

Object.fromEntries()与Object.entries()对应,它把键值对列表转换为一个对象。

6.Well-formed JSON.stringify()

更友好的JSON.stringify,对于一些超出范围的 Unicode,为其输出转义序列,使其成为有效 Unicode。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值