ES7-ES12的学习
ES7
数组的includes()
let arr = ['aaa', 'bbb', 'ccc', 'ddd', NaN]
if(arr.indexOf('aaa') !== -1) {
console.log('存在aaa元素~');
}
console.log(arr.includes('ddd', 2))
console.log(arr.includes(NaN))
指数运算符
console.log(Math.pow(2, 3))
console.log(2 ** 3)
ES8
Object.values()
var obj = {
name: 'Fhup',
age: 18
}
console.log(Object.values(obj));
console.log(Object.values('abc'))
Object.entries()
var obj = {
name: 'Fhup',
age: 18
}
console.log(Object.entries(obj))
for(const [key, value] of Object.entries(obj)) {
console.log(key ,value);
}
console.log(Object.entries(['aaa', 'bbb', 'ccc']))
console.log(Object.entries('abc'))
padStart()和padEnd()
let str = 'fhupyyds'
let padStr = str.padStart(15, '*').padEnd(20, '*')
console.log(padStr)
const cardNumber = '159753123456252514'
const sliceLastCard = cardNumber.slice(-4)
const newCard = sliceLastCard.padStart(cardNumber.length, '*')
console.log(newCard)
函数参数多加逗号问题
function foo(m, n,) {
console.log(m, n)
}
foo(1, 2,)
ES10
数组的flat和flatMap
const nums = [10, 20, [3, [33, 66, 99], 9], [1, 1], 30, 66]
const newNums = nums.flat()
console.log(newNums);
const arrs = [1, [2, 3], 4, [5, [6, 7, 8], 9], 10]
const newArrs = arrs.flatMap(item => {
return item
})
console.log(newArrs);
const messages = ['hello world', 'hello xxx', 'my name is Fhup']
const words = messages.flatMap(item => {
return item.split(' ')
})
console.log(words);
Object.fromEntries()
const obj = {
name: 'Fhup',
age: 18
}
const entries = Object.entries(obj)
let newObj = Object.fromEntries(entries)
const queryString = 'name=Fhup&age=18&height=1.88'
const queryParams = new URLSearchParams(queryString)
console.log(Object.fromEntries(queryParams));
字符串的trimStart()和trimEnd()
let str = ' aaa bbb '
var trimS = str.trimStart()
console.log(trimS);
console.log(trimS.length);
var trimE = str.trimEnd()
console.log(trimE);
console.log(trimE.length);
ES11
大整数BigInt的使用
const maxInt = Number.MAX_SAFE_INTEGER
console.log(maxInt)
console.log(maxInt + 1)
console.log(maxInt + 2)
const bigInt = 900719925474099100n
console.log(bigInt);
console.log(bigInt + 10n);
console.log(bigInt + BigInt(10));
const smallNum = Number(bigInt)
console.log(smallNum)
空值合并运算??
const foo = 0
const bar = foo ?? 'default value'
console.log(bar)
可选链
const info = {
name: 'Fhup',
}
console.log(info.friend?.girlFriend?.name)
获取全局对象globalThis
console.log(globalThis)
for-in操作的标准化
var obj = {
name: 'Fhup',
age: 18
}
for(let item in obj){
console.log(obj[item])
}
ES12
FinalizationRegistry
const fr = new FinalizationRegistry((value)=>{
console.log('注册在FinalizationRegistry上的对象被销毁了~', value)
})
let obj = { name: 'Fhup' }
let info = { age: 18 }
fr.register(obj, 'obj对象')
fr.register(info, 'info对象')
obj = null
info = null
WeakRef的使用
const fr = new FinalizationRegistry( (value) => {
console.log(value ,'对象被销毁~');
})
let obj = {
age: 18
}
let info = new WeakRef(obj)
fr.register(obj, 'obj')
obj = null
setTimeout(() => {
console.log(info.deref()?.age)
console.log(info.deref() && info.deref().age);
}, 10000)
逻辑赋值运算
let message = undefined
message ||= 'default'
console.log(message);
let obj = {
foo(){
console.log('foo');
}
}
obj.foo && obj.foo()
let info = 0
info ??= 'default'
console.log(info);
console.log(!!123);
console.log(Boolean(123))