数组方法
拆分多维数组flat
let arr = [1,2,[3,4,[5,6]]] console.log(arr.flat(2)) // [1,2,3,4,5,6]
数组元素修改fill
let arr = [1, 2, 3, 4, 5] console.log(arr.fill(10, 2)) // [1, 2, 10, 10, 10]
只改变数组其中一个元素with
let arr = [1, 2, 3, 4, 5] console.log(arr.with(1, 100)) //[1, 100, 3, 4, 5]
数值方法
Math.trunc() 方法会将数字的小数部分去掉,只保留整数部分
let a = 123.9999 console.log(Math.trunc(a)) // 123
Math.sign() 函数返回一个数字的符号,指示数字是正数,负数还是零
console.log(Math.sign(99)) // 1 console.log(Math.sign(-3)) // -1 console.log(Math.sign(0)) // 0
字符串方法
startsWith和endsWith方法可以判断字符串是否以指定字符串开头或结尾
let str = "hello" console.log(str.startsWith("h")) // true console.log(str.startsWith("h", 1)) // false console.log(str.endsWith("o")) // true
字符串的repeat方法可以重复字符串
let str = "hello" console.log(str.repeat(3)) // hellohellohello
字符串的padStart和padEnd方法可以对字符串进行填充
let str = "hello" console.log(str.padStart(10, "world")) // worldhello console.log(str.padEnd(10, "world")) // helloworld
at函数
用于访问数组
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
console.log(arr.at(1))
// 2
console.log(arr.at(-1))
// 10
generator函数
生成器函数可以暂停执行,下次调用时继续执行
function *generator() {
yield 'aaa';
yield 'bbb';
}
let a = generator();
for(let item of generator()){
console.log(item);
}
// aaa
// bbb
Reflect
Reflect对象提供了一组静态方法,用于操作对象的属性和方法
Reflect.has判断对象是否存在某个属性
let obj = { name: 'xiaoming', age: 18 } console.log(Reflect.has(obj, 'name')) // true
Reflect.ownKeys()返回这个对象自身的属性
console.log(Reflect.ownKeys(obj)) // [ 'name', 'age' ]
Reflect.defineProperty()为对象添加一个属性,并且可以进行配置
Reflect.defineProperty(obj, 'height', { value: 170, writable: true, enumerable: true, configurable: true }) console.log(obj) // { name: 'xiaoming', age: 18, height: 170 }
Reflect.set()为对象直接添加一个属性
Reflect.set(obj, 'weight', 70) console.log(obj) // {name: 'xiaoming', age: 18, weight: 70}
Reflect与Proxy联合使用
let obj = {} let proxy = new Proxy(obj, { get(target, key) { return Reflect.get(...arguments) }, set(target, key, value) { Reflect.set(...arguments) return true } })
matchAll()方法
返回一个迭代器,该迭代器包含了检索字符串与正则表达式进行匹配的所有结果
let str = `
<ul>
<li>1111</li>
<li>2222</li>
<li>3333</li>
<li>4444</li>
</ul>
`
let reg = /<li>(?<content>.*)<\/li>/g
for(var item of str.matchAll(reg)){
console.log(item)
}
Promise集合
一个 Promise 必然处于以下几种状态之一:
1.待定(pending):初始状态,既没有被兑现,也没有被拒绝。
2.已兑现(fulfilled):意味着操作成功完成。
3.已拒绝(rejected):意味着操作失败。
function ajax(str, time, isSuccess) {
if (isSuccess){
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(str);
}, time);
});
}else{
return new Promise((resolve, reject) => {
setTimeout(() => {
reject(str);
}, time);
});
}
}
Promise.all()等待所有 Promise, 在任意一个 Promise 被拒绝时拒绝
Promise.all([ajax('1',1000, true), ajax('2',2000, true)]).then((res) => { console.log(res) }).catch((err) => { console.log(err) })
Promise.race() 看哪一个 Promise 先被执行完,就执行哪一个 Promise
Promise.race([ajax('1',1000, true), ajax('2',2000, true)]).then((res) => { console.log(res) }).catch((err) => { console.log(err) })
Promise.any()当输入的任何 promise 实现时,此返回的 promise 将实现,并具有第一个 fulfillation 值。当所有输入的 promise 都拒绝时(包括传递空可迭代对象时),它会拒绝
Promise.any([ajax('1',1000, false), ajax('2',2000, true)]).then((res) => { console.log(res) }).catch((err) => { console.log(err, '拒绝') })
Promise.allSettled() 无论任何 promise 实现,此返回的 promise 都将实现,并具有一个数组,其中包含每个输入 promise 的状态和值。
Promise.allSettled([ajax('1',1000, false), ajax('2',2000, false)]).then((res) => { console.log(res) }).catch((err) => { console.log(err) })