ES6的新特性

来源:互联网 发布:中国移动视频软件 编辑:程序博客网 时间:2024/05/01 08:03

参考:http://www.imooc.com/article/14738
参考es6的书籍分章节描述,别例举其中经常使用的一个特性

第2章 let和const命令

增加了let和const命令,用来声明变量,let定义块级作用域的变量,const声明不能改变的常量
let和const均是在所声明的块级作用域有效

let命令用法:(1)for循环中变量的声明;(2)声明局部变量
V8引擎只在严格模式下支持let和const

第3章 变量的解构赋值

比如数组的解构赋值,[a,b]=[b,a]可以交换两个变量的值,而不引入第3个变量

第4章 字符串的扩展

ES5中字符串连接相当繁琐和不便,ES6使用模板字符串,用反引号来标识,${}来嵌入变量

4.新增模板字符串, template string(模版字符串拼接) (为JavaScript提供了简单的字符串插值功能)

要插入大段的html内容到文档中时,传统的写法非常麻烦,要用一堆的’+’号来连接文本与变量,而使用ES6的新特性模板字符串“后,我们可以直接这么来写:

$(“#result”).append(
There are <b>${basket.count}</b> items
in your basket, <em>${basket.onSale}</em>
are on sale!
);

用反引号(\)来标识起始,用${}来引用变量,而且所有的空格和缩进都会被保留在输出之中。

第18章 ES5类和对象

var Animal=function(name){
this.name=name;
}
animal.prototype={
speak:function(){
console.log(“I am”+this.name);
}
}
var animal = new Animal(“cat”);
animal.speak(); //I am cat

ES6类和对象(不过对于继承却有比较大作用)
class Animal{
constructor(name){
this.name=name
}

speak() {
console.log(“I am “+this.name);
}
}

let animal=new Animal(“cat”);
animal.speak();

ES6类的继承写法
继承的细节;参考:http://www.imooc.com/article/17389
class+extends+super
class Animal {
constructor(){//consttuctor是构造方法,其中定义的方法和属性是实例对象自己的
this.type = ‘animal’//this代表实例对象
}
says(say){//constructor外定义的方法和属性则是所有实例对象可以共享的
console.log(this.type + ’ says ’ + say)
}
}

let animal = new Animal()//一个实例对象
animal.says(‘hello’) //animal says hello

class Cat extends Animal {//继承class Animal所有的属性和方法
constructor(){
super()//指代父类的this对象,必须调用,以子类获得this对象,调用父类的constructor
this.type = ‘cat’
}
}

let cat = new Cat()
cat.says(‘hello’) //cat says hello

super关键字指代父类的实例,即父类的this对象。
ES6的继承机制,实质是先创造父类的实例对象this(所以必须先调用super方法),然后再用子类的构造函数修改this

第8章 函数的扩展

1.箭头函数(操作符左边为输入的参数,而右边则是进行的操作以及返回的值Inputs=>outputs。)
function(x, y) {
x++;
y–;
return x + y;
}//ES5
(x, y) => {x++; y–; return x+y}//ES6

=> 函数使用说明:
(1)函数体this是指定义时所在的对象,不是使用时所在对象。
(2)不可以使用new命令,否则会抛出一个错误。
(3)不可使用auguments对象,可以用rest参数代替。
2.rest参数
形式为(…变量名),该变量是一个数组,该变量将多余的参数放入其中, 用来代替arguments对象,rest参数后面不能有其他参数。
3**.扩展运算符**
形式为(…),它好比rest参数的逆运算,将数组转换为逗号分隔的参数序列。

5.ES6规定,var命令和function命令声明的全局变量,属于全局对象的属性;let命令、const命令、class命令声明的全局变量,不属于全局对象的属性。。

6.for-of(用来遍历数据—例如数组中的值。)
for-of循环可以使用的范围包括数组、set和map结构、某些类似数组的对象(比如arguments对象、DOM NodeList对象)、generator对象,以及字符创。
7.arguments对象可被不定参数和默认参数完美代替。
调用animal()方法时忘了传参数,传统的做法就是加上这一句type = type || ‘cat’ 来指定默认值。
function animal(type){
type = type || ‘cat’
console.log(type)
}
ES6允许为函数的参数设置默认值,即直接写在参数定义的后面。

function animal(type=“cat”){
console.log(type)
}

rest参数(形式为”…变量名”,)用于获取函数的多余参数,就不需要使用arguments对象了。
function animals(…types){
console.log(types)
}
animals(‘cat’, ‘dog’, ‘fish’) //[“cat”, “dog”, “fish”]
注意:1.rest参数后之后不能有其他参数,否则报错。
2.函数的length属性不包括rest参数。

8.ES6将promise对象纳入规范,提供了原生的Promise对象,用promise可以替代回调函数
问题:回调函数的应用场景:

9.还有就是引入module模块的概念
10.js中注意==和===的区别,慎重使用
11.扩展运算符(…),好比rest参数的逆运算,将一个数组转为用逗号分隔的参数序列。
console.log(…[1,2,3])

第7章 数组的扩展

Array.from()
Array.of():将一组值转化为数组,用来弥补Array()的不足,因为参数个数不同会导致Array()的行为有差异。

原创粉丝点击