ES6的特性

参考其他博客资料,理理ES6特性。

 1.箭头操作符

       我们在写js的时候,会经常用到回调函数,每次用回调的函数,都会用到function,而ES6的箭头操作符就与function作用相似,让代码更简洁。

    

var a = document.getElementById('a');

a.onclick = function(){
 console.log(this);
}
//相当于
a.onclick = () => {
	console.log(this);
}
	

2.支持类的使用

    在新的ES6特性中,引入了class关键字,与java中使用类似,面向对象的操作。

class person{
	constructor(name) {
		this.name = name
	}
		
	getName () {
		console.log('my name is ' + this.name);
	}
}
class family extends person{
	constructor(name){
		super(name);
	}
		
	record(){
		console.log('record...' + this.name);
	}
}
	
var person1 = new person('zhangsan');
var family1 = new family('wang wu');
person1.getName();
family1.getName();
family1.record();

结果如下:


3.模板字符

    在ES5中,我们常用的模板字符是用拼接的方法

var a = "11";
var b = "22";
var c = a + ":" + b;
console.log(a + b);
console.log(c);

   ES6中模板字符使用 `` 来连接字符串,里面的变量用${xxx},让代码简单明了,如下:

var a = "11";
var b = "22";
var c = `${a}:${b}`;
console.log(`${a}${b}`);
console.log(`${c}`);

4.解构赋值

    ES5中赋值和在ES6中赋值的区别:

var user = document.getElementById('xxx');
var id = user.id; 
var href = user.href;//ES5
var {id,href}=document.getElementById('a')//ES6

很明显,代码量比之前简洁得多,同样,如json,数组都可以解构。

var [a,b] = [1,2,3,4,5];//结果为 a = 1 ; b = 2;

var [c,,d] = [1,2,3,4,5]; //结果为 c = 1 ; d = 3; 

var [e,f,...g] = [1,2,3,4,5]; //结果为e = 1 ; f = 2 ; c = [3,4,5] ;     //数组解构
var {t1,t2,tt} = {
 t1 : 't1',
 t2 : 't2',
 tt : 'tt'
}
console.log(t1,t2,tt); //结果为 t1,t2,tt      //json解构
var {t1,t2,...tt} = {
 t1 : 't1',
 t2 : 't2',
 tt : 'tt',
 ts : 'ts'
}
console.log(t1,t2,tt); //结果为 t1,t2,{tt:'tt',ts : 'ts'}  ...xx的时候是指剩余的对象

5.let 和 const

 let有着var没有的特点,就是let的块级作用域,下面让我们试一下let与var的区别:

{
 var a = 1;
 let b = 1;
 console.log(a,b);a = 1 , b = 1
}
 console.log(a,b);//a= 1 ; ReferenceError

我们再看一个经典的例子:

for(var i = 0 ; i < 4 ; i ++)
{
 console.log(i);
}
console.log(i);
//第一个i的结果为 0,1,2,3
//第二个i的结果为 4
for( let a = 0 ; a < 4 ; a ++)
{
 console.log(a);
}
 console.log(a);
//第一个a的结果为 : 0,1,2,3
//第二个a的结果为 : ReferenceError,a is not define

以上例子可以说明var不存在块级作用域,let因为块级作用域不会用于全局变量,所以在作用域外时,会出现没有定义的错误。let的作用域可以理解为闭包,闭包就是所在作用域中, 可以引用上一级的对象,而上一级作用域不能使用闭包中的对象、变量。let不能重复定义,而且没有变量提升,看一下例子:

var a = 0;
var a = 1;
console.log(a);//a = 1;
let b = 0 ;
let b = 1;
console.log(b);//'b' has already been declared
console.log(a);
var a = 0 ; //undefine
console.log(b);
let b = 0;//b is not defined

总结一下let特点:(1). 无变量提升 (2).有块级作用域 (3).不能重新声明

const与let特点相同,但const只能声明静态的变量,不能改变其值,需要初始化

const a; //Missing initializer in const declaration
const b = 0 ;
//const b = 1;    //'b' has already been declared
 b = 1;  //Assignment to constant variable.

6.函数默认值

//ES5
function test(num , name){
 num = num || 0;
 name = name || 1;
}
//test(); // num = 0 ; name = 1;
//test(11,22) // num = 11 ; name = 22;

这个是ES5在函数内部定义的默认值,ES6设置默认值的方法,就是在函数设置虚参的时候,可以设置默认值。

function test(num , name = 2){
 console.log(`${num} : ${name}`);
}
test();//结果为undefine,2 

7.Promise

 promise运用在ES6中,是将回调函数一个一个分离出来,形成一个单链形式。

var p1 = new Promise(function(resolve,reject){
	resolve('200 OK');//回调函数
}).then(function(data){//接收值
	console.log(data);
})

以上就是ES6中,promise简单的例子,将resolve回调函数变成单链,将值传给data,再进行以后的操作。

var p1 = new Promise(function(resolve,reject){
	var rad = Math.random();
	if(rad > 0.5)
	 resolve('200 OK');
	else
	 reject('error');
}).then(function(data){
	console.log(data);
}).catch(function(error){//第二个回调reject值
	console.log(error)
})
而用第二个回调reject的时候,用catch接收,通过是判断异常

8.For遍历

var Ary = ['a','b'];
for(a of Ary)
{
 cosnole.log(a);
}

类似与foreach,直接遍历出结果,结果为a,b。与foreach不同的是,它可以使用break,continue,return语句。同时它也避免了for in,传入字符串的不便情况;

9.Iterator 与 Generator

Iterator(迭代器)是任意具有.next()方法的对象。可以循环调用.next()方法,例子如下:

var iterator = {
	iter : function(){
		return this;
	},
	next : function(){
		return {done : false,value:0}
	}
}
	
var p = iterator.iter();
console.log(p);
var q = p.next();
console.log(q);
p = p.next();
q = q.next();

以上就是迭代器,其中具有done和value属性,每次next以后,value的值都为0。

Generator(生成器)是一种返回迭代器的函数,用function* XX()使用,例子如下:

function* test(){
 var a = 0,
     b,c,d;
     b = 1;
     console.log(b);
     yield c = 2;
     console.log(c);
}
var p = test();
p.next();

yield的好处是可以控制,yield相当于return,但yield可以使函数运行到yield时候,停止函数,等待下一次的函数。而运行到yield函数的done是false,为未执行状态。

10.模块

模块是指将不同功能代码写在不同的代码块中,然后导出模块,在其他模块中运用其模块。

//test.js

    export var a = Math.random();
    
	export function sqr(){
		return a * a;
	}
	
	export function cir(){
		return a * 4;
    }
//main.js中
 	import {cir,sqr} form './test';
 	console.log(cir());
        console.log(sqr());

其模块的特点:

    1.每一个模块只加载一次,每一次只运行一次js。

    2.每一个模块变量都是局部变量,不会全局变量。

    3.函数内部变量、函数可以用export导出

    4.一个模块可以导入其他模块



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值