IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> ES7-ES12 -> 正文阅读

[JavaScript知识库]ES7-ES12

includes?

fromIndex 可选, 从fromIndex 索引处开始查找 valueToFind。如果为负值(即从末尾开始往前跳 fromIndex 的绝对值个索引,然后往后搜寻)。默认为 0。

arr.includes(valueToFind,[fromIndex])

想求2的10次方

console.log(Math.pow(2, 10)); // 1024
//或者
console.log(2 ** 10); // 1024

Object.getOwnPropertyDescriptors()

方法用来获取一个对象的所有自身属性的描述符。

const obj = {
  name: "jimmy",
  age: 18,
};
const desc = Object.getOwnPropertyDescriptors(obj);
console.log(desc);  
// 打印结果
{
  name: {
    value: 'jimmy',
    writable: true,
    enumerable: true,
    configurable: true
  },
  age: { 
   value: 18, 
   writable: true,
   enumerable: true, 
   configurable: true 
  }
}
  • value表示当前对象的默认值

  • writable表示对象属性是否可以修改

  • enumerable表示当前这个属性是否可以出现在对象的枚举属性中

  • configurable表示当前对象的属性能否用delete删除

那这些对象的属性我们怎么设置和修改他们呢,我们可以使用es5的?Object.defineProperty()?

const obj = {};
Object.defineProperty(obj, "name", {
  value: "jimmy",
  writable: true,
  configurable: true,
  enumerable: true,
});
Object.defineProperty(obj, "age", {
  value: 34,
  writable: true,
  configurable: true,
  enumerable: true,
});
console.log(obj); // { name: 'jimmy', age: 34 }
复制代码

padStart把指定字符串填充到字符串头部,返回新字符串。

'abc'.padStart(10);         // "       abc"
'abc'.padStart(10, "foo");  // "foofoofabc"
'abc'.padStart(6,"123465"); // "123abc"
'abc'.padStart(8, "0");     // "00000abc"
'abc'.padStart(1);          // "abc"

应用场景 :日期格式化:yyyy-mm-dd的格式

const now = new Date()
const year = now.getFullYear()
// 月份和日期 如果是一位前面给它填充一个0
const month = (now.getMonth() + 1).toString().padStart(2, '0')
const day = (now.getDate()).toString().padStart(2, '0')
console.log(year, month, day)
console.log( `${year}-${month}-${day}` ) //输入今天的日期 2021-12-31

数字替换(手机号,银行卡号等)

const tel = '18781268679'
const newTel = tel.slice(-4).padStart(tel.length, '*')
console.log(newTel) // *******5678

padEnd?把指定字符串填充到字符串尾部,返回新字符串(语法同上)

'abc'.padEnd(10);          // "abc       "
'abc'.padEnd(10, "foo");   // "abcfoofoof"
'abc'.padEnd(6, "123456"); // "abc123"
'abc'.padEnd(1);           // "abc"

ES8 允许函数的最后一个参数有尾逗号

async/await

async? 标记函数为异步函数(返回Promise)

await? ?必需在async标记的函数里面执行,await标记的函数执行完才向下执行(reslove)

await后面的Promise对象不必写then,因为await的作用之一就是获取后面Promise对象成功状态传递出来的参数

function fn(){
    return new Promise(resolve=>{//不加Promise不生效
        setTimeout(()=>{
            console.log(111)
            resolve()//调用resolve后才会向下执行(执行fn2),向下执行的关键节点
        },3000)
    })
}
function fn2(){
    setTimeout(()=>console.log(222),2000)
}
async function fn3(){//标记函数为异步函数
    await fn()
    fn2()
}
fn3()
//输出结果:3s后输入111   2s后输出222

for-await-of

异步迭代器(for-await-of):循环等待每个Promise对象变为resolved状态才进入下一步。

for...of 是同步的

function TimeOut(time) {
    return new Promise(function(resolve, reject) {
        setTimeout(function() {
            resolve(time)
        }, time)
    })
}
async function test() {
    let arr = [TimeOut(2000), TimeOut(1000), TimeOut(3000)]
    for await (let item of arr) {
        console.log(Date.now(), item)
    }
}
test()
// 1560092345730 2000
// 1560092345730 1000
// 1560092346336 3000

Array.prototype.flat()

let newArray = arr.flat([depth])
  • depth?可选,指定要提取嵌套数组的结构深度,默认值为 1。

flat()??方法会按照一个可指定的深度递归遍历数组,并将所有元素合并为一个新数组返回。

const arr1 = [0, 1, 2, [3, 4]];
console.log(arr1.flat());  //  [0, 1, 2, 3, 4]
const arr2 = [0, 1, 2, [[[3, 4]]]];
console.log(arr2.flat(2));  //  [0, 1, 2, [3, 4]]

//使用 Infinity,可展开任意深度的嵌套数组
var arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
arr4.flat(Infinity); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

// `flat()` 方法会移除数组中的空项:
var arr5 = [1, 2, , 4, 5];
arr5.flat(); // [1, 2, 4, 5]

?Array.prototype.flatMap()

先map? 后 flat (深度为1)

var new_array = arr.flatMap(function callback(currentValue, index, array) {
    // 返回新数组的元素
}[, thisArg])

对比map 和flatMap

const numbers = [1, 2, 3]
numbers.map(x => [x * 2]) // [[2], [4], [6]]
numbers.flatMap(x => [x * 2]) // [2, 4, 6]  map后执行flat了
let arr = ['今天天气不错', '', '早上好']
arr.map(s => s.split(''))
// [["今", "天", "天", "气", "不", "错"],[""],["早", "上", "好"]]
arr.flatMap(s => s.split(''))
// ["今", "天", "天", "气", "不", "错", "", "早", "上", "好"]

String.prototype.trimStart() / String.prototype.trimEnd()

trimStart() 方法从字符串的开头删除空格,trimLeft()是此方法的别名。

let str = '   foo  '
console.log(str.length) // 8
str = str.trimStart() // 或str.trimLeft()
console.log(str.length) // 5

trimEnd() 方法从一个字符串的右端移除空白字符,trimRight 是 trimEnd 的别名。

异常捕获

//ES10以前捕获异常
try {
    // tryCode
} catch (err) {
    // catchCode
}

//ES10之后,可以省略 err参数
try {
    console.log('Foobar')
} catch {
    console.error('Bar')
}

验证参数是否为json格式

const validJSON = json => {
    try {
        JSON.parse(json)
        return true
    } catch {
        return false
    }
}

globalThis

globalThis?提供了一个标准的方式来获取不同环境下的全局?this? 对象(也就是全局对象自身)

Promise.allSettled()

Promise.all() 具有并发执行异步任务的能力。但如果其中某个任务出现异常(reject),所有任务都会挂掉,Promise直接进入reject 状态。

Promise.allSettled:并发任务中,无论一个任务正常或者异常,都会全部返回对应的的状态

逻辑运算符和赋值表达式(&&=,||=,??=)

x &&= y
//等价于
x && (x = y);

x ||= y 
//等价于
x || (x = y);

x ??= y 
//等价于
x ?? (x = y);
//仅在x为null或undefined时。对x进行赋值

数字分隔符

欧美语言中,较长的数值允许每三位添加一个分隔符(通常是一个逗号),增加数值的可读性。比如,1000可以写作1,000

ES2021中允许 JavaScript 的数值使用下划线(_)作为分隔符

let a= 1_000;
a=== 1000 // true

但JS中没有明确的位数,可以每三位添加一个分隔符,也可以每一位、每两位、每四位

123_00 === 12_300 // true
12345_00 === 123_4500 // true
12345_00 === 1_234_500 // true
// 全部报错
3_.141
3._141
1_e12
1e_12
123__456
_1464301
1464301_

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 22:22:38  更:2022-03-10 22:25:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:17:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码