zoukankan      html  css  js  c++  java
  • 第九节:ES10之Object、String、Array、Function、可选Catch、JSON、Symbol扩展

    一. Object扩展

    1.  Object.fromEntries() 

     方法 Object.fromEntries() 把键值对列表转换为一个对象,这个方法是和 Object.entries() 相对的。

    Object.fromEntries([
        ['foo', 1],
        ['bar', 2]
    ])
    // {foo: 1, bar: 2}

    2. 场景1-Object转换

      const obj = {
            name: 'imooc',
            course: 'es'
        }
        const entries = Object.entries(obj)
        console.log(entries)
        // [ [ 'name', 'imooc' ], [ 'course', 'es' ] ]
        
        // ES10
        const fromEntries = Object.fromEntries(entries)
        console.log(fromEntries)
        // {name: "imooc", course: "es"}

    3. 场景2-Map转Object

    const map = new Map()
    map.set('name', 'imooc')
    map.set('course', 'es')
    console.log(map)
    
    const obj = Object.fromEntries(map)
    console.log(obj)
    // {name: "imooc", course: "es"}

    4. 场景3-过滤

     course表示所有课程,想请求课程分数大于80的课程组成的对象

        const course = {
            math: 80,
            english: 85,
            chinese: 90
        }
        const res = Object.entries(course).filter(([key, val]) => val > 80)
        console.log(res)   //[ [ 'english', 85 ], [ 'chinese', 90 ] ]
        console.log(Object.fromEntries(res))   //{ english: 85, chinese: 90 }

    二. String扩展

    1. trimStart()

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

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

    2.trimEnd()

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

    let str = '   foo  '
    console.log(str.length) // 8
    str = str.trimEnd()
    console.log(str.length) // 6

     

    三. Array扩展

    1. flat

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

     代码分享:

    const numbers = [1, 2, [3, 4, [5, 6]]]
    console.log(numbers.flat())
    // [1, 2, 3, 4, [5, 6]]

    PS:此时 flat 的参数没有设置,取默认值 1,也就是说只扁平化向下一级,遇到 [3, 4, [5, 6]] 这个数组会扁平会处理,不会再继续遍历内部的元素是否还有数组

    const numbers = [1, 2, [3, 4, [5, 6]]]
    console.log(numbers.flat(2))
    // [1, 2, 3, 4, 5, 6]

    PS:当 flat 的参数大于等于 2,返回值就是 [1, 2, 3, 4, 5, 6] 了。

    2. flatMap

     flatMap() 方法首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。从方法的名字上也可以看出来它包含两部分功能一个是 map,一个是 flat(深度为1)。

     代码分享:

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

    四. Function扩展

     修订 Function.prototype.toString()

    函数是对象,并且每个对象都有一个 .toString() 方法,因为它最初存在于Object.prototype.toString() 上。所有对象(包括函数)都是通过基于原型的类继承从它继承的。这意味着我们以前已经有 funcion.toString() 方法了。

    Function.prototype.toString() 方法返回一个表示当前函数源代码的字符串。

    这意味着还将返回注释、空格和语法详细信息。

        function foo() {
            // es10新特性
            console.log('imooc')
        }
        console.log(foo.toString())
        
        // 直接在方法名toString()
        console.log(Number.parseInt.toString())

    运行结果:

    五. 可选的catch binding

    ES10之前

    try {
        // tryCode
    } catch (err) {
        // catchCode
    }

    ES10

     ES10可以省略catch后面的参数

    try {
        console.log('Foobar')
    } catch {
        console.error('Bar')
    }

    六. JSON扩展

      JSON.stringify 在 ES10 修复了对于一些超出范围的 Unicode 展示错误的问题。因为 JSON 都是被编码成 UTF-8,所以遇到 0xD800–0xDFFF 之内的字符会因为无法编码成 UTF-8 进而导致显示错误。在 ES10 它会用转义字符的方式来处理这部分字符而非编码的方式,这样就会正常显示了。

         // uD83DuDE0E  emoji 多字节的一个字符
        console.log(JSON.stringify('uD83DuDE0E')) // 笑脸
    
        // 如果我们只去其中的一部分  uD83D 这其实是个无效的字符串
        // 之前的版本 ,这些字符将替换为特殊字符,而现在将未配对的代理代码点表示为JSON转义序列
        console.log(JSON.stringify('uD83D')) // "ud83d"

    七. Symbol扩展

     Symbol.prototype.description

     我们知道,Symbol 的描述只被存储在内部的 Description ,没有直接对外暴露,我们只有调用 Symbol 的 toString() 时才可以读取这个属性:

    const name = Symbol('es')
    console.log(name.toString()) // Symbol(es)
    console.log(name) // Symbol(es)
    console.log(name === 'Symbol(es)') // false
    console.log(name.toString() === 'Symbol(es)') // true

     现在可以通过 description 方法获取 Symbol 的描述:

    const name = Symbol('es')
    console.log(name.description) // es
    console.log(name.description === 'es') // true

    !

    • 作       者 : Yaopengfei(姚鹏飞)
    • 博客地址 : http://www.cnblogs.com/yaopengfei/
    • 声     明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
    • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
     
  • 相关阅读:
    微信和支付宝支付模式详解及实现(.Net标准库)- OSS开源系列
    Linux+Nginx+Asp.net Core及守护进程部署
    Docker基础入门及示例
    this的指向问题
    H5C3-JS 此后面试暂不记录了 因为我发现了错题集,直接看就行了
    H5C3-JS day04
    H5C3-JS day03
    two-sum
    H5C3-JS day02
    三次握手四次挥手
  • 原文地址:https://www.cnblogs.com/yaopengfei/p/14705403.html
Copyright © 2011-2022 走看看