es5与es6

在学习es5与es6之前,必须了解以下几个概念:

  • Javascript由DOM、BOM和ECMAScript组成。es5和es6中的es即是ECMAScript的缩写
  • es5指的的2012年到2015年发布的ECMAScript版本,es6指的是2015年发布的ECMAScript版本。目前,es的版本号已经发布到7。

es5

主要说明api

对象

对象 构造器 说明
Object getPrototypeOf 返回对象的原型
Object getOwnPropertyDescriptor 返回对象自有属性的属性描述符
Object getOwnPropertyNames 返回一个数组,包括对象所有自有属性名称集合(包括不可枚举的属性)
Object create 创建一个拥有置顶原型和若干个指定属性的对象
Object defineProperty 给对象定义一个新属性,或者修改已有的属性,并返回
Object defineProperties 在一个对象上添加或修改一个或者多个自有属性,并返回该对象
Object seal 锁定对象。阻止修改现有属性的特性,并阻止添加新属性。但是可以修改已有属性的值。
Object freeze 冻结对象,阻止对对象的一切操作。冻结对象将永远不可变。
Object preventExtensions 让一个对象变的不可扩展,也就是永远不能再添加新的属性。
Object isSealed 判断对象是否被锁定
Object isFrozen 判断对象是否被冻结
Object isExtensible 判断对象是否可以被扩展
Object keys 返回一个由给定对象的所有可枚举自身属性的属性名组成的数组,常用!

数组

对象 构造器 说明
Array.prototype indexOf 返回根据给定元素找到的第一个索引值,否则返回-1
Array.prototype lastIndexOf 方法返回指定元素在数组中的最后一个的索引,如果不存在则返回 -1
Array.prototype every 测试数组的所有元素是否都通过了指定函数的测试
Array.prototype some 测试数组中的某些元素是否通过了指定函数的测试
Array.prototype forEach 让数组的每一项都执行一次给定的函数
Array.prototype map 返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组
Array.prototype filter 利用所有通过指定函数测试的元素创建一个新的数组,并返回
Array.prototype reduce 接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终为一个值
Array.prototype reduceRight 接受一个函数作为累加器,让每个值(从右到左,亦即从尾到头)缩减为一个值

es6

es6新特性

新增特性 关键词 用法 描述
箭头操作符 Arrows v => console.log(v) 类似于部分强类型语言中的lambda表达式
类的支持 Classes - 原生支持类,让javascript的OOP编码更加地道
增强的对象字面量 enhanced object literals - 增强对象字面量
字符串模板 template strings ${num} 原生支持字符串模板,不再需要第三方库的支持
解构赋值 destructuring [x, y] = ['hello', 'world'] 使用过python的话,你应该很熟悉这个语法
函数参数扩展 default, rest, spread - 函数参数可以使用默认值、不定参数以及拓展参数了
let、const let、const - javascript中可以使用块级作用域和声明常量了
for…of遍历 for…of for (v of someArray) { ... } 又多了一种折腾数组、Map等数据结构的方法了
迭代器和生成器 iterators, generator, iterables - ES6较为难以理解的新东西,后面会有相关文章
Unicode unicode - 原生的unicode更加完美的支持
模块和模块加载 modules, modules loader - ES6中开始支持原生模块化啦
map, set, weakmap, weakset - - 新的数据结构
监控代理 proxies - 我们可以监听对象发生了哪些事,并可以自定义对应的操作
Symbols - - 我们可以使用symbol来创建一个不同寻常的key
Promises - - 这家伙经常在讨论异步处理流程时被提到
新的API math, number, string, array, object - 原生的功能性API就是方便些
内置对象可以被继承 subclassable built-ins - 可以基于内置对象,比如Array,来生成一个类
二进制、八进制字面量 - - 可以直接在es6中使用二进制或者八进制字面量了
Reflect API - - 反射API?
尾调用 tail calls - ES6中会自动帮你做一些尾递归方面的优化

参考