代码改变世界

ECMAScript、EC5、ES6、ES7

2020-01-04 14:05  cascle  阅读(290)  评论(0编辑  收藏  举报

一.ECMAScript入门介绍

JavaScript是ECMAScript的实现

 

JavaScript三部分核心:

1.ECMAScript实现

2.额外对象,BOM/DOM扩展

3.额外对象,Server侧扩展

 

2009,ES5发布

2015,ES6发布

2016,ES7发布(草案为主)

ES8草案也已发布 

 

ES5

二.ES5严格模式

相对于正常模式(混杂模式),语法更严格

 

'user strict';,打开严格模式,适用于全局或者函数

 

要求:

1.用var声明变量。

否则自动成为window对象的一个变量,污染全局环境。

2.禁止自定义的函数中this指向window。

也是为了防止污染全局环境。比如类函数如果没有new,直接调用,里边的this指向window而不是相应的对象

3.创建eval作用域。防止通过字符串注入。

eval字符串参数里定义的变量,在外边访问不到

4.对象不能有重名的属性。

 

三.ES5 json对象扩展

引入JSON

1.JSON.stringify():把js对象/数组转为json对象/数组

2.JSON.parse():把json对象/数组转为js对象/数组

json即为string类型,typeof <对象> 可以看出来

json对象/数组外边要是单引号包起来

 

四.ES5 Object对象方法扩展

 引入的最常用的两个静态方法

1.Object.create(prototype, [descriptors]):prototype对象被放到新对象__prototype__属性里。第二个参数是个对象数组,在新对象里添加一个属性。参数对象key是新对象的key,值又是一个对象,有value,writable,configurable,enumerable。

2.Object.defineProperties(object, descriptors):

为对象添加拓展属性。

拓展属性和属性不同,不能等同对待。他不是独立存在的,内存里没有他的位置,要根据其他属性获取,相应的,修改他也是要改他依赖的值

惰性获取,在浏览器里console log即可看出来

第二个参数key为属性名,value里get属性指定获取function,set属性指定设置function.set不能修改扩展属性的值,但是可以动原来属性的值

get和set在获取/设置拓展属性的时候自动调用

存取性属性:setter和getter

对象里边可以如下定义

{

get propertyName(){},

set propertyName(data){}

}

效果与defineProperties一样

 

五.ES5 数组扩展

Array.prototype添加了以下几个函数

  1. indexOf:第一个值为参数的index
  2. lastIndexOf:最后一个值为参数的index
  3. forEach:遍历数组每一个值
  4. map:返回一个新数组,为函数参数返回值
  5. filter:返回一个子数组,由函数参数为true的值构成

 

六.ES5 function扩展,apply/bind/call 

Function.prototype添加了以下三个方法

  1. bind:将this与obj绑定,返回函数对象。obj以外参数使用分离形式传入
  2. call:以分离形式传入obj以外参数,将this与obj绑定,立即调用
  3. apply:以数组形式传入obj以外参数,将this与obj绑定,立即调用

bind,call/apply都将函数对象的this与参数obj绑定。区别是bind将函数返回,call/apply绑定后立即调用

bind通常用来指定回调函数

 

ES6 

七.let/const 

 

 

 

 

ES7