ES5和ES6的内容

ES5新增的特性:

1、严格模式

2、bind方法/this关键字

3、JSON.parse/JSON.stringify

4、新增Array接口(indexOf,lastIndexOf等)

5、变量结构

严格模式的兼容性:

包括IE 10在内的主流浏览器,都已经支持它。同样的代码,在“严格模式”中,可能会有不一样的运行结果;一些在“正常模式”下可以运行的语句,在“严格模式”下将不能运行。

ES5的严格模式如何调用:“use strict”

“严格模式”有两种方法,使用于不同的场合。

1、针对整个脚本块(文件)的使用

2、针对单个函数

3、针对单个文件

ES5  JSON.parse/JSON.stringify

在ECMAscript代码中,经常会需要与JSON格式的数据进行交换。JSON也通常被用来作为客户端与服务器端之间的数据传输格式。这主要是因为在ECMAScript代码中处理JSON格式非常自然。JSON格式数据经过解析之后,可以直接当成ECMAScript中的对象来使用。在使用JSON格式时的一个重要问题是如何在ECMAScript中的对象与文本形式之间进行互相转换。

JSON.parse:字符串转换成JSON对象

JSON.stringify:JSON对象转换成字符串

ES6

    let/const关键字

1、  let用来声明变量

     用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效     

     var声明的变量,可以提升

     let声明的变量,不能声明提升

    以后能用let不用var

          块级作用域

          对于同一个变量,var可以重复声明,let不可以

2、const  只读变量,定义时候就赋值,以后不能更改。

const sex = '女';
sex = '男'
console.log(sex) // 值为女

console.log(sex)值为女

console的改变不能改变栈区内容,但是可以改变堆区内容。

const

1、修饰的变量是只读变量,常量,定义时就赋值,以后不能再更改

2、修饰的是直接表示的内存(再引用类型中体现)

const sex = '男';
sex = '女'; //这句话不能成功执行

//不能成功;因为,我们企图改变arr所代表的的内存区域

//这个不是改变arr所代表的内存,而是改变arr[0]所代表的内存区域

ES6=>函数

1、无函数名的箭头函数

let x => x * 5;

等价于

function (x) {
  return x * 5
}

例如:

let t = (x => x * 5)(8)

等价于

 let t = (function (x) {return x * 5})(8);

2、有函数名的箭头函数

let f = x => x * 5; // 把函数赋给一个变量

可变参数

function sum(...num) {
  console.log(num);
}
console.log(10, 20, 30 40, 50, 60)

返回值是对象

var f = (id, name) => ({id: id, name: name}); // 圆括号不能省略

箭头函数的优点:

对this转移的处理:

箭头函数内部的this是词法作用域,使用箭头函数后this不会发生转移

ES6结构赋值

结构数组:

结构赋值可将数组的元素或对象的属性赋予给另一个变量。该变量的定义语法于数组字面量灬对象字面量很相似

Set和Map结构

set和Map在很多的面向对象编辑语言中(java  c++)中都有。在其他的编程语言中,有个集合(容器)

Set 它类似于数组,单是成员的值都是唯一的,没有重复的值,可以简单的理解为无重复值的数组

Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化

Set结构的四个操作方法:

1、add(value):添加某个值,(添加之前会先做比较,这是add内部需要做的事情,如果有则不添加)返回set值本身。例如:s.add(10).add(20).add(35).add(56)

2、delete(value):删除某个值,返回的是boolean值,表示是否删除

3、has(value):判断值在集合中有没有

4、clear(value):清除所有成员,没有返回值

set数组的循环用for of循环,例如:for(let item of s){colose.log(item);}

for(let item of s) {
  console.log(item);
}

Map结构:

如果需要“键值对”的数据结构,Map比Object更合适。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当做键。Map就是键值对,跟对象有点像。但是Map的键除了可以是字符串外,还可以是任何数据类型(包括对象)。Map结构中的键是唯一的。

Map就是键值对,跟对象有点像。键可以是其它类型的数据。

var m = new Map();
m.set("007"{"id":"007", "name": "张三丰"}); //添加了一个元素,键是:007,值是一个对象
m.set("008"{"id":"008", "name": "张四丰"}); //添加了一个元素,键是:008,值是一个对象
m.set("009"{"id":"009", "name": "张五丰"}); //添加了一个元素,键是:009,值是一个对象
m.set("008"{"id":"008", "name": "李恒"}); //,键是:008,之前已有该键,此时将覆盖之前的键值对

var m=new Map();

m.set("007"{"id":"007","name":"张三丰"}); //添加了一个元素,键是:007,值是一个对象

m.set("008"{"id":"008","name":"张四丰"}); //添加了一个元素,键是:008,值是一个对象

m.set("009"{"id":"009","name":"张五丰"}); //添加了一个元素,键是:009,值是一个对象

m.set("008"{"id":"008","name":"李恒"}); //,键是:008,之前已有该键,此时将覆盖之前的键值对

Map的方法:

set:给Map对象增加一个键值对,如果,存在相同的键,就会覆盖

get:根据键获取值

has:判断Map结构的所有的键

delete:根据键删除Map结构中的对应值

keys:获取Map结构中所有的键

values:获取Map结构中所有的值

Map的属性:

size:Map结构中的数量

Generators(生成器)函数

Generators可以极大地简化代码,可以帮助你逃离“回调地狱”。

生成器函数和普通函数的区别:

1、普通函数使用function声明,而生成器函数使用function*声明。

2、在生成函数内部,有种类似return的语法:关键字yield。二者的区别是,普通函数只可以return一次,而生成器函数可以yield多次(当然也可以只yield一次)。在生成器的执行过程中,遇到yield表达式立即暂停,后续可恢复执行状态。
这就是普通函数和生成器函数之间最大的区别,普通函数不能自暂停,生成器函数可以。
Generators(生成器)函数代码

function* quips(name) {
  yield "你好 " + name + "!";
  yield "希望你能喜欢这篇介绍ES6的译文";
  if (name.startsWith("X")) {
    yield "你的名字 " + name + "  首字母是X,这很酷!";
  }
  yield "我们下次再见!";
}

生成器做了什么

当你调用quips()生成器函数时发生了什么?

> var iter = quips("jorendorff");
  [object Generator]
> iter.next()
  { value: "你好 jorendorff!", done: false }
> iter.next()
  { value: "希望你能喜欢这篇介绍ES6的译文", done: false }
> iter.next()
  { value: "我们下次再见!", done: false }
> iter.next()
  { value: undefined, done: true }

ES6 class

类:分类,类型。数据类型。程序员根据项目(业务)的不同,会定义无数的数据类型。

对象:类的具体表现,变量。

定义一个类型,ES6中使用class关键字

定义一个医生类型,相当于定义number、boolean、Array等等

例如:

构造函数:构造医生

class Doctor {
  constructor(id, name, dept){
    this.id = id;
    this.name = name;
    this.dept = dept;
  }        
  eat (str) {
    alert(this.name + "再吃" + str);
  }
  work () {
    alert(this.name + "再看病");
  }
}

实例化一个医生(定义一个医生变量)

var d1 = new Doctor("007","李恒","骨科");
d1.eat("泡面");
d1.work();

 函数的定义方式有函数声明和函数表达式两种方式,类的定义也有两种方式

1)声明

2)表达式

继承:子类自动拥有父类的属性和方法

super:子类必须在constructor方法中调用        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值