ES6, 全称 ECMAScript 6.0
是 JavaScript 的下一个版本标准,2015.06 发版。
ES6 主要是为了解决 ES5 的先天不足,比如 JavaScript 里并没有类的概念,但是目前浏览器的 JavaScript 是 ES5 版本,大多数高版本的浏览器也支持 ES6,不过只实现了 ES6 的部分特性和功能。
一变量类型与声明
声明变量
var、let、const
var声明可以进行变量提升
什么是变量提升:用var 声明变量 ,变量的使用在变量声明前 默认值是undefined
js在执行会预编译,会把所有的变量提升在代码的最前面并赋值为undefine,
也会把所有的函数提升在最前面
let声明和 var 声明变量差不多,let通常用于语句块局部作用域{},
声明的变量只在 let 命令所在的代码块{}内有效。
1 let 声明的变量是局部变量 在一对{}有效
2 let 不能重复声明
3 let 不会变量提升
const 声明一个只读的常量,一旦声明,常量的值就不能改变,
约定大写变量名
注意:当const定义的为复杂类型 数组或对象是是可以更改的
const 声明常量
1 声明必须赋值
2 不能修改(值类型)数字 字符串 布尔
3 建议变量名大写
二Symbol类型
ES6 引入了一种新的原始数据类型 Symbol ,表示独一无二的值,
最大的用法是用来定义对象的唯一属性名。
属性名唯一:由于每一个 Symbol 的值都是不相等的,所以 Symbol 作为对象的属性名,可以保证属性不重名。
常量值唯一:使用 Symbol 定义常量,这样就可以保证这一组常量的值都不相等
Symbol.for() 类似单例模式,首先会在全局搜索被登记的 Symbol 中是否有该字符串参数作为名称的 Symbol 值,如果有即返回该 Symbol 值,若没有则新建并返回一个以该字符串参数为名称的 Symbol 值,并登记在全局环境中供搜索。
Symbol.keyFor() 返回一个已登记的 Symbol 类型值的 key ,用来检测该字符串参数作为名称的 Symbol 值是否已被登记。
三字符串
扩展的方法:
• includes():返回布尔值,判断是否找到参数字符串。
• trim():返回新的字符串,去除字符串的头尾空格
• startsWith():返回布尔值,判断参数字符串是否在原字符串的头部。
• endsWith():返回布尔值,判断参数字符串是否在原字符串的尾部。
• repeat():返回新的字符串,表示将字符串重复指定次数返回。
• padStart:返回新的字符串,表示用参数字符串从头部(左侧)补全原字符串。
• padEnd:返回新的字符串,表示用参数字符串从尾部(右侧)补全原字符串。
模板字符串`${}`
模板字符串相当于加强版的字符串,用反引号 `,除了作为普通字符串,还可以用来定义多行字符串,还可以在字符串中加入变量和表达式。
1.实现多行字符串
2.使用`${变量名}`的格式将变量与字符串拼接
3.字符串插入变量和表达式。变量名写在 ${} 中,${} 中可以放入 JavaScript 表达式和函数。
四解构赋值
数组模型的解构(Array)
基本
let [a, b, c] = [1, 2, 3];
// a = 1
// b = 2
// c = 3
可嵌套
let [a, [[b], c]] = [1, [[2], 3]];
// a = 1
// b = 2
// c = 3
可忽略
let [a, , b] = [1, 2, 3];
// a = 1
// b = 3
不完全解构
let [a = 1, b] = [];
// a = 1, b = undefined
剩余运算符
let [a, ...b] = [1, 2, 3];
//a = 1
//b = [2, 3]
字符串等
在数组的解构中,解构的目标若为可遍历对象,皆可进行解构赋值。可遍历对象即实现 Iterator 接口的数据。
let [a, b, c, d, e] = 'hello';
// a = 'h'
// b = 'e'
// c = 'l'
// d = 'l'
// e = 'o'
解构默认值
let [a = 2] = [undefined];
// a = 2
当解构模式有匹配结果,且匹配结果是 undefined 时,会触发默认值作为返回结果。
let [a = 3, b = a] = [];
// a = 3, b = 3
let [a = 3, b = a] = [1];
// a = 1, b = 1
let [a = 3, b = a] = [1, 2];
// a = 1, b = 2
- a 与 b 匹配结果为 undefined ,触发默认值:a = 3; b = a =3
- a 正常解构赋值,匹配结果:a = 1,b 匹配结果 undefined ,触发默认值:b = a =1
- a 与 b 正常解构赋值,匹配结果:a = 1,b = 2
对象模型的解构(Object)
基本
let { foo, bar } = { foo: 'aaa', bar: 'bbb' };
// foo = 'aaa'
// bar = 'bbb'
let { baz : foo } = { baz : 'ddd' };
// foo = 'ddd'
可嵌套可忽略
let obj = {p: ['hello', {y: 'world'}] };
let {p: [x, { y }] } = obj;
// x = 'hello'
// y = 'world' let obj = {p: ['hello', {y: 'world'}] };
let {p: [x, { }] } = obj;
// x = 'hello'
不完全解构
let obj = {p: [{y: 'world'}] };
let {p: [{ y }, x ] } = obj;
// x = undefined
// y = 'world'
剩余运算符
let {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40};
// a = 10
// b = 20
// rest = {c: 30, d: 40}
解构默认值
let {a = 10, b = 5} = {a: 3};
// a = 3; b = 5;
let {a: aa = 10, b: bb = 5} = {a: 3};
// aa = 3; bb = 5;
五数组方法
1. 遍历数组 forEach
2. 映射数组 map
通过现有的数据反射出来新的数据 一一对应
3. 过滤 filter
现有数组通过一定的规则过滤出新的数组
返回true 保留 false 不保留
4.累计 reduce 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值
5.一个 some 检测数组元素中是否有元素符合指定条件 返回true 或者 false
只要回调函数有一个为true 则整个都返回true
6.每个 every 检测数值元素的每个元素是否都符合条件 返回true 或者 false
回调函数都返回为true 则整个都返回true
7.复制数组 copywithIn(替换位置,拷贝开始,拷贝结束) 方法用于从数组的指定位置拷贝元素到数组的另一个指定位置中。
8. 包含 includes(obj) 返回一个布尔值 arr是否包含obj
9. 查找 find 返回通过测试(函数内判断)的数组的第一个元素的值 查找元素
10.填充 fill(内容,start,end) 使用一个固定值来填充数组
六map和set
Map 结构
JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),
但是传统上只能用字符串当作键。
Map结构类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。
Map的属性和方法:
• Map.size :属性返回 Map 结构的成员总数。
• Map.set(key, value):设置键名key对应的键值为value,然后返回整个 Map 结构。如果key已经有值,则键值会被更新,否则就新生成该键。
• Map.get(key):get方法读取key对应的键值,如果找不到key,返回undefined。
• Map.has(key):has方法返回一个布尔值,表示某个键是否在当前 Map 对象之中。
• Map.delete(key):delete方法删除某个键,返回true。如果删除失败,返回false。
• Map.clear():clear方法清除所有成员,没有返回值。
• Map.keys():返回键名的遍历器。
• Map.values():返回键值的遍历器。
• Map.entries():返回所有成员的遍历器。
• Map.forEach():遍历 Map 的所有成员。
ES6 提供了新的数据结构 Set。
它类似于数组,但是成员的值都是唯一的,没有重复的值。
Set的属性和方法:
• Set.size:返回Set实例的成员总数。
• Set.add(value):添加某个值,返回 Set 结构本身。
• Set.delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
• Set.has(value):返回一个布尔值,表示该值是否为Set的成员。
• Set.clear():清除所有成员,没有返回值。
• Set.keys():返回键名的遍历器
• Set.values():返回键值的遍历器
• Set.entries():返回键值对的遍历器
• Set.forEach():使用回调函数遍历每个成员
七函数
函数参数的扩展
【默认参数,可选参数】
function myFun(a,b=3,c=15){
console.log('myFun:',a,b,c)
}
myFun(7)
myFun(7,7)
myFun(7,7,7)【可变参数个数 参数】
function myFun(...a){
console.log('myFun:',a)
}myFun(5,2,1,8,9)
【扩展参数】
function myFun(a, b, c) {
console.log('myFun:', a, b, c)
}var x = [7, 3, 4]
myFun(...x)
var y = [7, 2, 54, 9, 2, 1, 8, 63, 20]
console.log(Math.max(...y))
八箭头函数
1.基本写法
前面是函数参数 => 后面是返回值也是执行语句
省略function 关键字 、return 关键字
2.多个参数 或者 没有 都用括号包起来
3.执行语句有多个的时候 用{}包括起来,
4.箭头函数this 指的是函数上一层的this
九迭代器
【Iterator 迭代器 : 调用 迭代器next()方法的就是 迭代器】
【Iteratable 可迭代对象: 能用于for of 迭代的 对象成为可迭代对象】【常见的迭代对象有哪些??】
Array String Set Map NodeList HTMLCollection ...
【常见的迭代器】
obj.keys() obj.values() obj.entries()
generator-生成器
十 生成器Generator
生成器函数
generator(生成器)是 ES6 标准引入的新的数据类型。一个 generator 看上去像一个函数,但可以返回多次。
generator 函数和普通的函数区别有两个, 1:function 和函数名之间有一个*号, 2:函数体内部使用了 yield 表达式
生成器对象的使用方法
next()
调用 生成器对象的 next() 方法,才是真正开始执行生成器函数,每次遇到 yield 或者 return 就会返回一个对象{value: "1", done: false}
value 表示 yield 或 return 后面的值。
done 表示这个 对象是否已经结束(迭代到末尾了)forof 循环
调用迭代器循环 生成器对象。可以直接获取到 yield 后面的值。扩展运算符
...生成器对象 也可以获取 yield 后面的值。【注 1】next()到 return 表示结束(没有 return,其实是隐含了 return undefined),且 return 之后的 yield 不会被执行到
【注 2】done 到最后返回 true,表示结束
【注 3】return 不会被 forof 和扩展运算符遍历到。所以只能用 next()获取到 return 的值
十对象
提示:这里填写该问题的具体解决方案:
例如:新建一个 Message 对象,并将读取到的数据存入 Message,然后 mHandler.obtainMessage(READ_DATA, bytes, -1, buffer).sendToTarget();换成 mHandler.sendMessage()。