zoukankan      html  css  js  c++  java
  • ECMAScript、EC5、ES6、ES7

    一.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

  • 相关阅读:
    微擎开发笔记
    Array对象的方法实现(1)----Array.prototype.push和Array.prototype.concat(实现常规参数的功能)
    ThinkCMF 5 基础门户CMS框架的模板widget标签实现
    [转]mysql为什么默认有那么多root用户,还有用户名为空的用户?
    PHP 5.4特性 trait
    道破人性
    c#使用easyhook库进行API钩取
    黑马eesy_15 Vue:04.综合案例(前端Vue实现)
    黑马eesy_15 Vue:04.Vue案例(ssm环境搭建)
    黑马eesy_15 Vue:03.生命周期与ajax异步请求
  • 原文地址:https://www.cnblogs.com/cascle/p/12148875.html
Copyright © 2011-2022 走看看