一、ES6
set()
对数组进行去重
const arr = [1,1,1,2,6,4,1,2,3,4,21]
console.log(Array.from(new Set(arr)));
const set = new Set()
set.add(10)
set.add(15)
set.add(78)
set.delete(10)
console.log(Array.from(set));
二、ES7
includes()
确定数组是否包含指定的元素。
const names = ['abv','dfs','dfdw']
console.log(names.includes('abv'));
三、ES8
Object.values()
返回一个数组,其元素是在对象上找到的可枚举属性值。
const obj = {
name: 'why',
age: 18
}
console.log(Object.values(obj));
Object.entries()
获取一个数组,数组中会存放可枚举属性的键值对数组
const obj = {
name: 'why',
age: 18
}
console.log(Object.entries(obj));
padStart
和padEnd
允许将空字符串或其他字符串添加到原始字符串的开头或结尾
const message = 'Hello World'
const newMessage = message.padStart(15,"*").padEnd(20,"-")
console.log(newMessage);
Object.getOwnPropertyDescriptors()
:获取对象的所有属性描述符
let obj = {
age: 18,
name: 'why'
}
console.log(Object.getOwnPropertyDescriptors(obj))
四、ES9
(...)
扩展运算符
const arr1 = [10, 20, 30]
const copy = [...arr1]
console.log(copy);
const arr2 = [40, 50]
const merge = [...arr1, ...arr2]
console.log(merge);
五、ES10
flat()
多维数组转为一维数组
const nums = [10, 20, [2, 9], [[30, 50], [10, 95]], 78, [55, 98]]
console.log(nums.flat());
console.log(nums.flat(2));
flatMap()
方法首先使用映射函数映射每个元素,然后将结果压缩成一个新数组
const nums = [10, 20, 30]
const newNumber = nums.flatMap(item=>{
return item * 2
})
console.log(newNumber);
const message = ["Hello World", "hello why", "hello abc"]
const words = message.flatMap(item=>{
return item.split(" ")
})
console.log(words);
trimStart()和trimEnd()
方法去除字符串头部尾部空格
const message = " Hello World "
console.log(message.trimStart());
console.log(message.trimEnd());
六、ES11
??空值合并运算符
如果第一个参数不是null/undefined,则 ??
返回第一个参数,反之则返回第二个
const foo = 0
const bar = foo ?? "why"
console.log(bar);
?.可选链
当对象属性不存在时不会直接报错,而是返回undefined
const info = {
name: 'why',
}
console.log(info?.friend?.girlFriend);
console.log(info.friend.girlFriend);
七、ES12
FinalizationRegistry
对象在被销毁时执行回调
const finalRegistry = new FinalizationRegistry((value)=>{
console.log('注册在finalRegistry的对象' + value + '给销毁了');
})
let obj = {name: 'why'}
let age = {age: 18}
finalRegistry.register(obj, 'obj对象')
finalRegistry.register(age, 'age对象')
obj = null
age = null
||=
逻辑或 、&&=
逻辑与、??=
逻辑空运算符
let message = 18
message ||= '没有值'
console.log(message);
let obj = {
name: '5454'
}
obj &&= obj.name
console.log(obj);
let values = 0
values ??= "default value"
console.log(values);