环境搭建方面:
部分浏览器不支持,如:
1.解构赋值
数组:
let [a,[[b]] c] = [1,[[2]],[3]] 可嵌套
a=1,b=2,c=3
字符串:
let [a,b,c,d] = ‘hel’ 不完全结构
a=‘h’,b=‘e’,c=‘l’,d=underfine
对象:
let obj = {a:2,b:3}
let {a:x,b:y}=obj;
x=2;b=3
剩余运算符
let {a,…rest} = {a:10,b=2,c=3}
a=10,rest={b:2,c:3}
结构默认值:
let {a=3,b=4} = {a:5}
a=5,b=4;
2.symbol 类型
let sy = Symbol('cc');
console.log(sy);//Symbol(cc)
console.log(typeof(sy)); //symbol
let sy2 = Symbol('dd');
console.log(sy===sy2); //false
使用场景:定义属性和常量
let sy = Symbol('cc');
let obj = {
[sy]:"5"
}
//调用
console.log(obj[sy]); //5
注意:该属性是公有属性不是私有属性,可以在类的外部访问。但是不会出现在 for…in 、 for…of 的循环中,也不会被 Object.keys() 、 Object.getOwnPropertyNames() 返回。如果要读取到一个对象的 Symbol 属性,可以通过 Object.getOwnPropertySymbols() 和 Reflect.ownKeys() 取到。
3.Map与set
Map:
// 简单的使用
let myMap = new Map();
var keyObj = {};
myMap.set(0, 'qwe');
myMap.set(1, 'asd')
let n = myMap.get(0)
console.log(n);
// map的迭代
for (var [a, b] of myMap) {
// console.log(a, b);
}
for (var [a, b] of myMap.entries()) {
console.log(a, b);
}
for (var key of myMap.keys()) {
console.log(key);
}
for (var value of myMap.values()) {
console.log(value);
}
// map与array的转换
let array1 = [['key1', 'value1'], ['key2', 'value2']];
let newArray = new Map(array1); //数组转对象
let newArray2 = Array.from(newArray);//对象转数组
// console.log(newArray2);
Set:
// set
let mySet = new Set();
mySet.add(2)
mySet.add(1)
mySet.add("some text");
var o = { a: 1, b: 2 };
mySet.add(o);
console.log(mySet);
// Array转set与string转set
let array3 = ['a', 'b'];
let newArray3 = new Set(array3);
let String1 = 'hello';
newString1 = new Set(String1);
console.log(newString1);
4.Reflect与Proxy
5.字符串
includes():返回布尔值,判断是否找到参数字符串。
startsWith():返回布尔值,判断参数字符串是否在原字符串的头部。
endsWith():返回布尔值,判断参数字符串是否在原字符串的尾部。
// 接收两个参数 1.字符串 2.索引
let string = "apple,banana,orange";
console.log(string.includes('apple'));//true
console.log(string.startsWith('apple'));//true
console.log(string.endsWith('apple')); //false
console.log(string.startsWith("banana", 6)) // true);
6.数值
7.对象
属性和属性名一样时可以简写,
方法可以简写,
方法名可以写成表达式
let obj = {
["he" + "llo"]() {
console.log('2');
}
}
obj.hello(); //"Hi"
对象的拓展运算符:
let person = { name: "Amy", age: 15 };
let teacher = { ...person, age: 18 };
console.log(teacher); //age: 18,name: "Amy"
//注意 属性相同时,后边的会覆盖前面的
新方法object.assign,用于合并对象,第一个参数是目标对象,后面的参数是源对象。
Object.is(value1, value2)
用来比较两个值是否严格相等,与(===)基本类似。
8.数组
(1)Array.of
Array.of() 将参数中所有值作为元素形成数组。
所有值作为元素形成数组。例如:
console.log(Array.of(1,2,4,5));//[1,2,4,5]
// 注意:参数为空时返回新数组
(2)Array.form
Array.form 将类数组转换为数组
场景:例如
function arg() {
return Array.from(arguments).reduce((sum, num) => sum + num)
}
// arg(1, 2, 3);
console.log(arg(1, 2, 3));
(3)find findIndex
find:查找数组中符合条件的元素,若有多个符合条件的元素,则返回第一个元素。
findIndex()
查找数组中符合条件的元素索引,若有多个符合条件的元素,则返回第一个元素索引。
(4) entries
遍历键值对,例如:
for (let [key, value] of ['a', 'b'].entries()) {
console.log(key, value);
}
//不使用for of
let arr = ['a', 'b'];
console.log(arr.entries().next().value);
(5)keys() values()
console.log(['a'].keys().next().value); // 0
console.log(['a'].values().next().value); // a
拓展运算符
9.iterator 迭代器
例如:
const items = ["zero", "one", "two"];
// const it = items[Symbol.iterator]();
const it = items[Symbol.iterator]()
console.log(it.next().value);