数组的拓展方法:
arr.keys()方法: 获取数组的所有索引值 chrome没有实现
arr.values()方法: 获取数组的所有成员值chrome没有实现
arr.entries()方法:
作用: 获取数组所有索引值以及成员值
返回: 数组迭代器对象
使用for fo方法遍历此对象可获得数组
第一个成员表示索引值
第二个成员表示成员值
数组迭代器特征:
遍历数组迭代器内容, 只能使用for of方法, for循环, for in无效
可以通过next方法包含每一个值的对象
数组迭代器只能被获取一次
对象的复制:
jq中的extend(any)方法:
作用: jQuery中复制对象的方法
参数: @any 如果是true表示深复制(此时后面的参数表示需要复制的对象,可多个), 如果是对象表示浅复制
返回值: 复制的对象(如果复制的是多个对象, 多个对象会合并到一起)
window.assign(obj1, obj2...)方法: (浅复制)
作用: 扩展对象, 将别的对象的值复制给目标对象
参数:
@obj1 目标对象
@obj2... 被复制的对象(可多个)
返回值: 拓展后的目标对象(@obj1), 若有同名属性, 后面的覆盖前面的
Symbol数据类型: ES6新增数据类型
应用: 为一个库添加属性、方法, 是很危险的,原因新增的属性、方法可能会替换掉原有的属性或者方法,原理就是名称可能会同名,es6新增symbol数据类型是为了解决这个问题,通过symbol新增的属性是永远不会同名的
使用Symbol类型的值不会被覆盖:
语法: var key = Symbol(value)
注意: 一旦通过Symbol类型为对象添加属性, 访问这个属性值, 只能通过变量名访问
例如: {Symbol(value): "red"},
访问属性值只能使用obj[key], key表示Symebol(value)的变量名
obj[Symbol(value)] 这种写法访问不到该属性
代理对象:
应用: 不允许用户直接访问一些隐私数据, 而是通过代理对象访问, 通过代理对象屏蔽一些危险操作.
创建代理对象: new Proxy(obj, configObj)
@obj 被代理的对象
@dealObj 处理代理对象的接口方法对象
get(obj, key) 用户获取对象属性时的处理方法
@obj 被代理的对象
@key 获取的属性名
set(obj, key, value) 用户设置对象属性时的处理方法
@obj 被代理的对象
@key 被设置的对象属性名称
@value 用户设置的属性值
默认参数:
ES6允许我们在参数中使用赋值符号,定义默认参数
例如: function drawColor(color = 'green'){}
获取剩余参数:
应用: 箭头函数中不能使用arguments, 可以使用...arg语法代替
语法: ...arg
例如: function drawColor(color1, color2, ...color){}
前面的参数可以正常使用
获取的color变量是一个数组
解构:
解构对象:
作用: 直接使用变量名调用对象的属性
语法: var {属性名称} = 对象
大括号内的属性名称必须要与对象的属性名称一致
例如: var {Model, Controller, View} = Backbone;
解构数组:
作用: 可以将一个数组的每个成员转化成函数参数
语法: var [变量1, 变量2, ...变量们] = 数组
每个变量表示一个成员
如果想获取所有剩余成员可以使用...语法,获得的是一个数组
例如: var [color1, color2, ...color] = ["red", "green", "blue", "pink"] ;
箭头函数:
定义语法: () => {}
() 内定义参数集合
=>箭头
{} 函数体
特征:
不能使用arguments
作用域和箭头函数所在的作用域一致
不能作为构造函数使用(因为第二条)
省略:
只有一个参数, 小括号可以省略
函数体只有返回值, 大括号可以省略, return可以省略
更改作用域: 只能更改箭头函数所在的作用域, 来达到更改箭头函数作用域的目的
Set对象:
ES6中聚合类数据一共有四种: 数组、对象、set对象、map对象
创建set对象:
语法:new Set(arr);
参数: @arr是一个数组, 会自动对数组中每一个成员去重
返回: set实例化对象
add(any)方法:
作用: 为set对象添加成员
参数: 只能接收一个参数, 表示添加的成员, 会自动去重
返回值: set对象, 因此可以链式调用
delete(any)方法:
作用: 删除set对象的成员
参数: 只能接收一个参数, 表示删除的成员
返回值: 布尔值, true表示删除成功
has(any)方法:
作用: 查询是否拥有某个成员
参数: 只能接收一个参数, 表示查询的成员
返回值: 布尔值, true表示存在
clear()方法:
作用: 清空set对象
forEach(fn)方法: 此方法的回调函数的参数和全局的forEach不一样
作用: 遍历set对象
参数: @fn 回调函数
参数1 表示值
参数2 表示值
参数3 表示set对象
返回值: undefined
size()方法: 获取对象长度
set对象实现了迭代器接口, 所以可以通过for of遍历
WeakSet对象: 弱set对象, 因为不能被内存回收机制回收, 所以不建议使用
Map对象:
作用: Map对象是对象的扩展, 允许属性名称是任何类型, 如: null、undefined、数字等等
创建Map对象:
语法:new Map()
对象方法:
set(key, value)方法:
作用: 为map对象添加新属性
参数: @key 属性名称 @value 属性值
返回值: map对象, 因此可以链式调用
get(key)方法:
作用: 获取map对象中某个属性值
参数: @key 属性名称
返回值: @key的属性值
clear()方法: 清空map对象
has(key)方法:
作用: 判断某个属性值是否存在
参数: @key 属性名称
返回值: 布尔值, true表示存在
delete(key)方法:
作用: 删除讴歌属性值
参数: @key 属性名称
返回值: 布尔值, true表示删除成功
forEach(fn)方法:
作用: 遍历map对象
参数: @fn 回调函数
参数1 value
参数2 key
参数3 map对象
作用域: 全局
size(): 获取长度
WeakMap对象:弱map对象, 不能被内存回收机制回收, 少用
迭代器:
ES6中实现了迭代器接口, 但是没有实现迭代器对象Iterator
迭代器应用:
数据解构、数组解构、对象解构
定义map对象、set对象
使用for of循环
实现了迭代器接口的数据(实现迭代器接口的特征是能否实现for of循环)
Generator函数:
作用: 储存状态
语法: function * 函数名称() {}
定义状态:
语法: yield 状态内容;
每一个yield定义一个状态, 最后一个状态用return定义
函数运行后得到一个状态对象:
状态对象实现了迭代器接口, 因此可以通过for of循环遍历, 但遍历不到最后一个状态(return)
可以使用next访问状态
返回值: 一个对象
done表示是否完成遍历
value表示状态的值
例子:
// 定义generator函数
function * dayState () {
// 定义状态
yield '睁眼';
yield '砸闹钟';
yield '接着再睡';
yield '再睁眼';
yield '起来了';
yield '上学';
yield '学习';
// 睡觉是最后一个状态
return '睡觉';
}
// 使用generator函数必须执行
var ds = dayState();
// 访问状态
console.log(ds.next())
Promise对象: 允诺对象
作用: 将一部操作转化成同步的写法
promise对象内部维护一个状态, 有三种情况:
rending 异步执行的操作还没有接触
resolved 异步操作已经执行完成
rejected 异步操作执行失败
promise三种情况, 只能存在两种状态的转化, 因此只能出现两个状态:
pending 进入 resolved, 异步操作执行成功
pending 进入 rejected, 异步操作执行失败
创建对象: new Promise(fn);
参数: @fn 回调函数
参数1(一般命名为resolve) 用来将pending状态转换成resolved状态
参数2(一般命名为reject) 用来将pending状态转换成rejected状态
作用域: 全局
在回调函数中执行异步操作,当执行完毕, 会触发相应的状态改变
可以在promise实例化对象中通过then方法绑定回调函数
then(successFn, errFn)方法:
作用: 触发状态是做的事
参数:
@successFn成功时执行的回调函数
@errFn 失败时执行的回调函数
这两个回调函数的参数是执行resolve或reject方法时传递的参数
all方法:
作用: 监听多个允诺对象
如果一个失败了就立即执行失败回调函数
如果都成功了, 执行成功时的回调函数