ES6中常用的10个新特性

1.不一样的变量声明:const和let

    let和var的区别:let是块级作用域,即局部变量;var是全局作用域
    
	let和const的区别:let和const都是块级作用域,let是变量;const是常量,一旦声明,值不能在改变
		var x = '全局变量';
		{
		  let x = '局部变量';
		  console.log(x); // 局部变量
		}
		console.log(x); // 全局变量

		const a = 1
		a = 0 //报错
tip:
	如果const的是一个对象,则对象所包含的值是可以被修改的(const的是地址,不是值)
		const student = { name: 'cc' }

		student.name = 'yy';// 不报错
		student  = { name: 'yy' };// 报错
		let 关键词声明的变量不具备变量提升(hoisting)特性
		let 和 const 声明只在最靠近的一个块中(花括号内)有效
		当使用常量 const 声明时,请使用大写变量,如:CAPITAL_CASING
		const 在声明时必须被赋值

2.模版字符串

在es6中,用${}和反引号来代替“+”
		es5:
		$('.app').html('hello world'+a)
		
		es6:
		$('.app').html(`hello world,${a}`)

3.箭头函数(Arrow Functions)

箭头函数的形式:()=>

不需要 function 关键字来创建函数
省略 return 关键字
继承当前上下文的 this 关键字
	es5:
	let fun=function (a,b){
	return a+b
}
	es6:
	let fun=(a,b)=>a+b

	// ES5
	[1,2,3].map((function(x){
	    return x + 1;
	}).bind(this));
	    
	// 使用箭头函数
	[1,2,3].map(x => x + 1);
		
tip:当且仅当有一个值的时候,是不需要括号的

4.函数的参数默认值

	// ES6之前,当未传入参数时,text = 'default';
	function printText(test) {
	    test= test|| 'default';
	    console.log(test);
	}
	
	// ES6;
	function printText(test= 'default') {
	    console.log(test);
	}
	
	printText('hello'); // hello
	printText();// default

5.Spread / Rest 操作符

Spread / Rest 操作符指的是 ...,具体是 Spread 还是 Rest 需要看上下文语境。

当被用于迭代器中时,它是一个 Spread 操作符:

	 function foo(x,y,z) {
     console.log(x,y,z)
	 }
	 let arr=[7,8,9]
	 foo(...arr) //7,8,9
	  function f(...arr) {
	      console.log(arr)
	  }
	  f(1,2,3,4,5,5,5,5) //[1,2,3,4,5,5,5,5]	
</script>

6.二进制和八进制字面量

ES6 支持二进制和八进制的字面量,通过在数字前面添加 0o 或者0O 即可将其转换为八进制值:
	let oValue = 0o10;
	console.log(oValue); // 8
	 
	let bValue = 0b10; // 二进制使用 `0b` 或者 `0B`
	console.log(bValue); // 2

7.对象和数组解构

	    // 对象
    const student = {
        name: 'john',
        age: 22,
        sex: '女'
    }
    // ES5;
    const name = student.name;
    const age = student.age;
    const sex = student.sex;
    console.log(name + ' --- ' + age + ' --- ' + sex);

    // ES6
    const { name, age, sex } = student;
    console.log(name + ' --- ' + age + ' --- ' + sex);

8.对象超类

ES6 允许在对象中使用 super 方法:
		let parent = {
        foo() {
            console.log("Parent");
        }
	    }
	
	    let child = {
	        foo() {
	            super.foo();
	            console.log("Child");
		        }
		    }
	
	    Object.setPrototypeOf(child, parent);
	    child.foo(); // Parent
	                 // Child

9.for…of 和 for…in

for...of 用于遍历一个迭代器,如数组:
		let letters = ['a', 'b', 'c'];
		letters.size = 3;
		for (let letter of letters) {
		  console.log(letter);
		}
		// 结果: a, b, c
for...in 用来遍历对象中的属性:
	 let stus = ["john", "22", "女"];
	 for (let stu in stus) {
	   console.log(stus[stu]);
	  }
	// 结果: john, 22, 女

10.ES6中的类

ES6 中支持 class 语法,不过,ES6的class不是新的对象继承模型,它只是原型链的语法糖表现形式。

函数中使用 static 关键词定义构造函数的的方法和属性:
	class Student {
	  constructor() {
	    console.log("I'm a student.");
	  }
	 
	  study() {
	    console.log('study!');
	  }
	 
	  static read() {
	    console.log("Reading Now.");
	  }
	}
	 
	console.log(typeof Student); // function
	let stu = new Student(); // "I'm a student."
	stu.study(); // "study!"
	stu.read(); // "Reading Now."
类中的继承和超集:
	  class Phone {
        constructor() {
            console.log("I'm a phone.");
        	}
	    }
	
	    class MI extends Phone {
	        constructor() {
	            super();
	            console.log("I'm a phone designed by xiaomi");
	        }
	    }
	
	    let mi8 = new MI();//I'm a phone.
		                   // I'm a phone designed by xiaomi
tip:
extends 允许一个子类继承父类,需要注意的是,子类的constructor 函数中需要执行 super() 函数。
当然,你也可以在子类方法中调用父类的方法,如super.parentMethodName()。
有几点值得注意的是:

类的声明不会提升(hoisting),如果你要使用某个 Class,那你必须在使用之前定义它,
否则会抛出一个 ReferenceError 的错误
在类中定义函数不需要使用 function 关键词
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值