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。

原文地址:https://www.cnblogs.com/fushuxin/p/10483470.html