ES6新增了许多新特性,不是因为面试经常会问才需要会它,个人认为里面的许多方法特别简单
下面是我整理的一些比较常用的新增特性
一、新增数据类型
Symbol
1.特性
Symbol()函数,返回一个symbol类型的值,该类型具有静态属性和静态方法。
每个Symbol()返回的symbol值都是唯一的,这是该数据类型仅有的目的,可以作为对象属性的标识符使用
Symbol()存在原型链Symbol.prototype
不支持语法:"new Symbol()"创建对象
不支持将一个 symbol 值转换为一个 number。
不支持将一个字符隐式创建,例如: symbol('a') + '1231'
2.总结
- Symbol用法很强大普遍,es5私有api中已经有很多的使用,例如:常用的
String.prototype.split()
。 - Symbol创建的值唯一。
- 替代传统的常量定义保证唯一并且不被串改将是非常友好的。
- 定义私有属性将会非常方便。
Set
Set是类似于数组,但成员的值都是唯一的数据结构。//Set(3) {"一月", "二月", "三月"}
基本使用
//添加数据
monthSets.add("一月");
monthSets.add("二月").add("三月");
console.log(monthSets); //Set(3) {"一月", "二月", "三月"}
//遍历集合Set
//forEach():使用回调函数遍历每个成员
monthSets.forEach((item) => console.log(item)); //一月 二月 三月
//for...of:直接遍历每个成员
for (const item of monthSets) {
console.log(item); //一月 二月 三月
}
//删除数据
monthSets.delete("二月");
console.log(monthSets); // Set(2) {"一月", "三月"}
monthSets.clear(); //
console.log(monthSets); // Set(0) {}
常见应用
let monthSets = new Set(["一月", "二月", "三月"]);
//一、快速判断数据元素是否存在
monthSets.has("一月"); //true
//二、统计数据元素个数
monthSets.size; //3
console.log(monthSets.size); //3
//三、数组去重
let arr = [1, 2, 3, 2, 3, 4, 5];
let set = new Set(arr);
console.log(set); // {1, 2, 3, 4, 5}
//四、合并去重
let arr = [1, 2, 3];
let arr2 = [2, 3, 4];
let set = new Set([...arr, ...arr2]);
console.log(set); // {1, 2, 3, 4}
WeakSet
WeakSet与Set类似,也是不重复的值的集合,但WeakSet的成员只能是对象。WeakSet引用的对象都是弱引用,如果其他对象不再引用该对象,那么垃圾回收机制就会自动回收这些对象所占用的内存,不考虑该对象还存在于WeakSet之中。
Map
Map是一种键值对集合,与对象类似,但Object只支持“字符串:值”,而Map支持“各种类型的值:值”,map给我们提供了更合适的“键值对”数据结构。
基本使用
//定义
let map = new Map();
//添加数据
let address = { address: "江苏" };
map.set("name", "ES6");
map.set(27, "年龄信息");
map.set(address, "地址信息");
console.log(map); //{"name" => "ES6", 27 => "年龄信息", {…} => "地址信息"}
//获取数据
let name = map.get("name");
let age = map.get(27);
let addressObj = map.get(address);
console.log(name, age, addressObj);
//获取成员数量
console.log(map.size); //3
//判断是否指定key成员
console.log(map.has("name")); //true
Map的遍历
map通常可以用forEach和for...of的方式进行遍历。
WeakMap
WeakMap与Map类似,也是用来生成键值对的集合。但WeakMap只接受对象作为键名,并且键名所指向的对象,属于弱引用对象。
二、const、let声明变量方式
- 有块级作用域
- 不会声明提升
三、模板字符串
四、对象解构赋值
五、延展运算符(...)
六、对象字面量增强
七、Class类的支持
八、Promise异步对象
九、模块import、export
十、数组、对象新增方法
Array
- filter
array.filter(item => { return '条件'}) // 返回过滤后的数组
- some
array.some(item => { return '条件'}) // 如果数组中一旦有满足条件的成员,返回true,否则返回false。
- every
array.every(item => { return '条件'}) // 如果数组中所有成员满足条件,返回true,否则返回false。
- map
array.map(item => { return '包装后的新成员'}) // 返回新包装的成员组成的新数组。
- from
Array.from('类数组') // 会将一个类数组结构数据转换成数组。比如数组去重 Array.from(new Set(array))
- flat
flat用于将嵌套的数组“拉平”。该方法返回一个新数组,对原数据没有影响。
[1, 2, [3, 4]].flat() // [1, 2, 3, 4]
- of
Array(3) // [,,]
Array.of(3) // [3]
- find、findIndex、includes...
object
- Object.assign
Object.assign(target,obj1,obj2,...)
// 可以用来合并对象,将第二个参数obj1以及后边的对象都合并在target中。
属性名相同,后边的会覆盖前边的,target中没有的属性,则会新增。
最后返回合并后的对象。
// assign方法只是浅拷贝。
如果想知道更多直接去ES6官网查看就行了