zoukankan      html  css  js  c++  java
  • ES6简介

    ES6概念

    ES6是JavaScript下一代标准,在2015年6月正式发布。可用于编写复杂的大型应用程序,成为企业级开发语言

    编写环境

    nodeJS是JavaScript语言的服务器运行环境,对ES6的支持度比浏览器高,我们通过安装nodeJS环境,可以体验更多的ES6特性。

    我们使用版本管理工具nvmw(Windows)来安装node,可以自由切换版本。

    环境支持

    Babel转码器可以吧ES6转化为ES5,这样我们可以用ES6编写程序而无需担心环境是否支持。

    新增了很多特性

    1. 增加了let命令,const命令,import命令和class命令
    2. 增加了块级作用域:内外层互不干扰,外层无法读取内层变量。
    3. ES6规定var 和function声明的变量属于全局对象的属性,let,const,class声明的全局变量不属于全局对象的属性
    4. 变量的解构赋值:ES6当中可以从数组、对象、字符串中提取值,按照位置的对应关系给变量赋值。
    5. Es6新增了Module模块的概念
    6. 还将Promise对象纳入了规范。避免层层嵌套的回调函数。提供了统一的接口,使得控制异步操作更加的容易
    7. 新增箭头函数,箭头左边是输入的参数,右边是进行的操作和返回的值。箭头函数使表达式更加的简洁。箭头函数当中的this指的的是定义时所在的对象而不是使用时所在的对象。这样我们在使用的时候就不会产生很多歧义了。
    8. 新增了许多操作数组的方法:Array.from(arrylikelist)把类数组对象和可枚举的对象转化为数组;比如我们用dom操作获得的nodelist不可以使用数组的原生方法,这时候可以使用Array.from()方法把它转化成数组。Array.of(1,2,4)把一组数值转化为数组。数组实例的find(fn)找出第一个符合条件的数组成员。findIndex(fn)返回第一个符合条件的数组成员的位置。[].fill(num)用定值填充数组。
    9. 新增了模板字符串:用反引号标识,可以当中普通字符使用,字符串中可以用${value}嵌入变量,带来了很多方便。

    变量声明: 

          let命令:用于声明变量,它所声明的变量只有在let命令所在的代码块才有效。let声明的变量不存在变量声明提升,必须在声明后使用。在块中存在let,const命令,这个区块对这些变量形成封闭作用域。不能够在声明之前使用变量:ES6规定不存在变量声明提升防止在变量声明之前就使用它,减少运行时的错误。let不允许在相同的作用域内重复声明一个变量。

         const命令:用于声明常量,一旦声明就不可修改。而且声明时必须赋值。也在声明的块当中有效。也不可重复声明,也不提升。

    块级作用域:内外层互不干扰,外层无法读取内层变量。

    ES5中只有全局作用域和函数作用域。比如for循环的括号里用var声明的变量泄漏为全局变量;ES6当中,用let声明变量只在块级作用域内有效。let实际上为JavaScript新增了块级作用域。

    块级作用域使得立即执行函数不再必要了。立即执行函数相当于一个块级作用域。

    ES5存在函数声明提升,而在ES6当中代码块中的函数不会影响到作用域的外部。

    Promise:

    ES6将Promsie纳入了规范,并原生提供了Promise对象

    promise对象用来传递异步操作的信息:它代表了一个未来才知道结果的事件,并且这个事件提供统一的API,可供进一步处理

    优点:避免层层嵌套的回调函数。它提供了统一的接口,使得控制异步操作更加的容易

    用promise对象实现AJAX操作
    var getJSON=function(url){
        var promise=new Promise(function(resolve,reject){
            //AJAX操作
            $.ajax({
                url:url,
                type:'GET',
                dataType:'json',
                success:function(data){
                    resolve(data);
                },
                error:function(xhr,textStatus){
                    reject(textStatus);
                }
            })
        })
    
        return promise;
    }
    getJSON('/post.json') /*这里是promise实例对象*/
        /*状态改变时的回调函数*/
        .then(
            //状态从pending进行中——resolved已完成时调用的函数
            function( /*从resolve传过来的数据*/ data) {
                //成功后执行的操作
                console.log(data);
            },
            //状态从pending进行中——rejected失败时调用的函数
            function( /*从reject传过来的数据*/ ) {
                //失败后的操作
                console.log(data);
            }
        )
  • 相关阅读:
    阿里巴巴的26款超神Java开源项目
    10个爬虫工程师必备的工具
    微服务的发现与注册--Eureka
    国内最火5款Java微服务开源项目
    LeetCode 700. 二叉搜索树中的搜索
    LeetCode 104. 二叉树的最大深度
    LeetCode 908. 最小差值 I
    LeetCode 728. 自除数
    LeetCode 704. 二分查找
    LeetCode 852. 山脉数组的峰顶索引 (二分)
  • 原文地址:https://www.cnblogs.com/t1amo/p/6775174.html
Copyright © 2011-2022 走看看