zoukankan      html  css  js  c++  java
  • ECMAScript 6

    ECMAScript 6

      ECMAScript 6(简称ES6)是于2015年6月正式发布的JavaScript语言的标准,正式名为ECMAScript 2015(ES2015)。它的目标是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言

    ES6 是 ECMAScript 标准十余年来变动最大的一个版本,为其添加了许多新的语法特性。

    发展历史

    • 1997 年 ECMAScript 1.0 诞生。
    • 1998 年 6 月 ECMAScript 2.0 诞生,包含一些小的更改,用于同步独立的 ISO 国际标准。
    • 1999 年 12 月 ECMAScript 3.0诞生,它是一个巨大的成功,在业界得到了广泛的支持,它奠定了 JS 的基本语法,被其后版本完全继承。直到今天,我们一开始学习 JS ,其实就是在学 3.0 版的语法。
    • 2000 年的 ECMAScript 4.0 是当下 ES6 的前身,但由于这个版本太过激烈,对 ES 3 做了彻底升级,所以暂时被"和谐"了。
    • 2009 年 12 月,ECMAScript 5.0 版正式发布。ECMA 专家组预计 ECMAScript 的第五个版本会在 2013 年中期到 2018 年作为主流的开发标准。2011年6月,ES 5.1 版发布,并且成为 ISO 国际标准。
    • 2013 年,ES6 草案冻结,不再添加新的功能,新的功能将被放到 ES7 中;2015年6月, ES6 正式通过,成为国际标准
    1. 用 let 声明的变量具有块级作用域,只能在声明的块中访问,在块外面无法访问
    2. 用let声明的变量也没有声明提前这一特性。
    3. 在同一个块中,let声明的变量也不能重复声明。

     

    ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效

    		var lis = document.getElementsByTagName("li");
    		for(let i = 0; i < lis.length;i ++){
    			lis[i].onclick = function(){
    				console.log(i)
    			}
    		}
    		console.log(i);
    

      若用var来声明,则每次点击结果都相同

      注意:

    1. 用 let 声明的变量具有块级作用域,只能在声明的块中访问,在块外面无法访问
    2. 用let声明的变量也没有声明提前这一特性。
    3. 在同一个块中,let声明的变量也不能重复声明。

    const声明一个只读的常量。一旦声明,常量的值就不能改变,const的作用域与let命令相同:只在声明所在的块级作用域内有效。

    		const obj = {};
    		obj.name = "jack";
    		console.log(obj.name);
              
              const fs = require("fs");
              const http = require("http");

    Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。

    所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果

    		var pro = new Promise(function(resolve,reject){
    			resolve(123);     //这个是成功的,我要把成功后的数据123传递出去
    		})
    		pro.then(function(val){      //then方法执行完成以后又返回了一个promise对象
    			//这个是成功的回调
    			console.log("成功了,接收到的数据为:" + val);
    			return val + 1;
    		},function(err){
    			//这个是失败的回调
    			console.log(err);
    		}).then(function(val){
    			console.log(val)
    		},function(err){})
    

      

    Promise对象有以下两个特点。

    (1)对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。

    (2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。如果改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的

    ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

        // 例一
        const set = new Set([1, 2, 3, 4, 4]);
        [...set]
        // [1, 2, 3, 4]
    
        // 例二
        const items = new Set([1, 2, 3, 4, 5, 5, 5, 5]);
        items.size // 5
    

      可用此方法去除数组重复成员和去除字符串里面的重复字符。

      Array.from方法可以将 Set 结构转为数组。

        const items = new Set([1, 2, 3, 4, 5]);
        const array = Array.from(items);
    

      

        function arr(array) {
          return Array.from(new Set(array));
        }
    
        arr([1, 1, 2, 3]) // [1, 2, 3]
    

      解构赋值

                    // json格式
    		var {a,b,c} = {a:10,c:30,b:20};    //可以调换顺序
    		console.log(a,b,c);
    
    		var [a,[b,c],d] = [5,[10,20],30];  //格式对应即可
    		console.log(a,b,c,d)
    
    
    		// 解构
    		var [{a,b},c,[d,e],f] = [{b : "jack",a : "100"},5,[10,20],30];
    		console.log(a,b,c,d,e,f)            
    

      循环

                var arr = ["red","green","blue","yellow","black"];        
                for(var i of arr){
    			console.log(i);   //输出的直接是值
    	    }    
    

      Map对象

                    // map就是用来存东西的,跟obj类似
    		var map = new Map();   
    		// console.log(map);
    		map.abc = "jack";
    		map.age = "100";
    		console.log(map);
    
    		// 设置值  增 该
    		map.set("a","red");
    		map.set("b","green");
    		console.log(map)
    
    		// //查
    		console.log(map.abc);
    		console.log(map.get('a'));
    
    		// // 删除
    		delete map.abc;
    		delete map.a;
    		map.delete("a");
    		console.log(map)
    
    
    		var arr = [];
    		arr.abc = "jack";
    		arr.age = "100";
    		console.log(arr)
    		console.log(arr[0]);    
    

      箭头函数

                    var fun = () => {
    			console.log(arguments);
    		}
    
    		fun(1,2,3,4)        
    

      

    在箭头函数中则没有这样的问题,在箭头函数中,this和定义时的作用域相关,不用考虑调用方式

    箭头函数没有 this 绑定,意味着 this 只能通过查找作用域链来确定。如果箭头函数被另一个不包含箭头函数的函数囊括,那么 this 的值和该函数中的 this 相等,否则 this 的值为 window。

  • 相关阅读:
    UOJ#310. 【UNR #2】黎明前的巧克力(FWT)
    cf24D. Broken robot(高斯消元)
    loj#2483. 「CEOI2017」Building Bridges(dp cdq 凸包)
    给博客园加一个会动的小人-spig.js
    loj#6033. 「雅礼集训 2017 Day2」棋盘游戏(二分图博弈)
    loj#6032. 「雅礼集训 2017 Day2」水箱(并查集 贪心 扫描线)
    洛谷P4103 [HEOI2014]大工程(虚树 树形dp)
    Oracle DB SQL 性能分析器
    ORA-000845 与 /dev/shm(tempfs)
    ID3DXMesh接口 创建自己的立方体网格
  • 原文地址:https://www.cnblogs.com/fushuxin/p/10483470.html
Copyright © 2011-2022 走看看