ES6
1. let和const
- 不存在变量提升。
- 暂时性死区(temporal dead zone,简称 TDZ):在代码块内使用
const
命令和let
命令声明变量之前,该变量都不可用 - 不允许重复声明
let不允许在相同作用域内,重复声明同一个变量。 - const 命令
1).const声明一个只读的常量。一旦声明,常量的值就不能改变
2).对于const来说,只声明不赋值,就会报错
。let命令声明变量后可立马赋值或使用时赋值
3).const的作用域与let命令相同:只在声明所在的块级作用域内有效
4). const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用。
2. 解构赋值
1.对象解构
- 形式:const { x, y } = { x: 1, y: 2 }
- 默认:const { x, y = 2 } = { x: 1 }
- 改名:const { x, y: z } = { x: 1, y: 2 }
3. 对象扩展
3.1 Object.is(): 对比两值是否相等
const a = NaN;
const b = NaN;
console.log(a == b) // false
console.log(Object.is(a, b)); // true
3.2 object.assign(): 合并对象(浅拷贝),返回原对象
const a = {name: '穷哈', age: 18};
const b = {sex: '男', otherName: '拿扎', age: 20};
const c = Object.assign( {}, a, b)
a.name = '热巴'
console.log(c); // { name: '穷哈', age: 20, sex: '男', otherName: '拿扎' }
// 如果有相同的key,则value为后面的覆盖前面的
4. 数组扩展
4.1 扩展运算符(…)
对象
const a = {name: '穷哈', age: 18};
const b = {sex: '男', otherName: '拿扎', age: 20};
const c = {...a, ...b}
a.name = '热巴'
console.log(c); // { name: '穷哈', age: 20, sex: '男', otherName: '拿扎' }
// 如果有相同的key,则value为后面的覆盖前面的
数组
const d = ['fuck', 'kao', 'ni', 233];
const e = [233, 7, 45, 'bu']
const f = [...new Set([...d, ...e])]
console.log(f); // ['fuck', 'kao', 'ni',233, 7, 45, 'bu']
4.2 Array.from():
转换具有Iterator接口的数据结构为真正数组,返回新数组
- 类数组对象:包含length的对象、Arguments对象、NodeList对象
- 可遍历对象:String、Set结构、Map结构、Generator函数
function getArrayFrom() {
const arr = Array.from(arguments);
console.log(Object.prototype.toString.call(arr)); // [object Array]
console.log(arr) // [ 1, '好的', false ]
}
getArrayFrom(1, '好的', false)
4.3 find(): 返回第一个符合条件的成员
var ages = [3, 10, 18, 20];
function checkAdult(age) {
return age >= 18;
}
console.log(ages.find(checkAdult)) // 18
4.4 findindex(): 返回第一个符合条件的成员索引值
var ages = [3, 10, 18, 20];
function checkAdult(age) {
return age >= 18;
}
console.log(ages.findindex(checkAdult)) // 2
5. 箭头函数
箭头函数有几个使用注意点。
- 函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。并非因为内部有绑定this的机制,而是根本没有自己的this,导致内部的this就是外层代码块的this
- 不可以当作构造函数,也就是说,不可以使用new命令。
不可以使用arguments对象
,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。- 不可使用yield命令,因此箭头函数不能用作Generator函数
6. Set
6.1 定义: Set 类似于数组,但是成员的值都是唯一的,没有重复的值。
6.2 声明: const set = new Set(arr)
。
6.3 属性
constructor
:构造函数,返回Setsize
:返回实例成员总数
const arr = [1, 2, 9, 'biu', 'love'];
const set = new Set(arr);
console.log(set.size); // 5
6.4 方法
- add(value) //添加某个值,返回 Set 结构本身。
- delete(value) //删除某个值,返回一个布尔值,表示删除是否成功。
- has(value) //返回一个布尔值,表示该值是否为Set的成员。
- clear() //清除所有成员,没有返回值。
遍历方法(用于遍历成员):
- keys() // 返回键名的遍历器
- values() // 返回键值的遍历器
- entries() // 返回键值对的遍历器
- .forEach() // 使用回调函数遍历每个成员
6.5 注意点:
- Set的遍历顺序就是插入顺序。这个特性有时非常有用,比如使用 Set 保存一个回调函数列表,调用时就能保证按照添加顺序调用。
- Set 结构没有键名,只有键值(或者说键名和键值是同一个值),所以 keys方法和 values方法的行为完全一致。
- 在 Set 内部,两个NaN是相等的。
- 添加相同的对象时,会认为是不同的对象。
- 添加值时不会发生类型转换(5 !== “5”)
7. Map
Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。
它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。
-
定义: 类似于对象的数据结构,成员键是任何类型的值
-
声明: const set = new Map(arr)
-
方法:
- get():返回键值对
- set():添加键值对,返回实例
- delete():删除键值对,返回布尔
- has():检查键值对,返回布尔
- clear():清除所有成员
- keys():返回以键为遍历器的对象
- values():返回以值为遍历器的对象
- entries():返回以键和值为遍历器的对象
- forEach():使用回调函数遍历每个成员
注意点:
- 遍历顺序:插入顺序
- 对同一个键多次赋值,后面的值将覆盖前面的值
- 对同一个对象的引用,被视为一个键
- 对同样值的两个实例,被视为两个键
- 键跟内存地址绑定,只要内存地址不一样就视为两个键
- 添加多个以NaN作为键时,只会存在一个以NaN作为键的值
- Object结构提供字符串—值的对应,Map结构提供值—值的对应
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。