附录拾遗

作者: F_wind | 来源:发表于2021-02-22 13:56 被阅读0次

    《深入理解ES6》阅读随笔

    ES6 中一些其他小变化

    Number 新方法

    整数识别

    Number.isInteger 方法接收一个参数,返回一个布尔值为结果,如果参数是整数类型,返回 true,否则返回 false。

    console.log(Number.isInteger(10)) // true
    console.log(Number.isInteger('10')) // false
    console.log(Number.isInteger(10.0)) // true
    console.log(Number.isInteger(10.1)) // false
    
    安全数值

    JavaScript 中的整数有个安全范围:负 2 的 53 次方到正 2 的 53 次方。如果超过此范围,就会出现计算混乱的情况:

    let integer1 = 10;
    console.log(integer1) // 10
    integer1 = Math.pow(2, 53)
    console.log(integer1) // 9007199254740992
    integer1++
    console.log(integer1) // 9007199254740992 很明显,此处是不对的
    

    因此在可能会超过该安全范围时,最好先预先判断一下数值类型,ES6 提供了新的方法 Number.isSafeInteger 可用于判断整数是否安全,而默认的安全范围也可以通过 Number.MAX_SAFE_INTEGER 来获取到:

    let integer1 = Number.MAX_SAFE_INTEGER
    console.log(integer1) // 9007199254740991
    console.log(Number.isSafeInteger(integer1)) // true
    integer1++
    console.log(Number.isSafeInteger(integer1)) // false
    

    一些新增的 Math 方法

    ES6 新增的定型数组极大的增强 JavaScript 的游戏和图形能力,除此之外,ES6 还新增了一些常用的数学运算方法,以提高密集型应用的执行效率(具体哪些方法此处不再赘述)。

    Unicode 标记符

    // ES5
    const \u0061 = 'test1'
    console.log("\u0061")
    console.log(\u0061)
    // ES6
    const \u{62} = 'test2'
    console.log("\u{62}")
    console.log(\u{62})
    

    __proto__

    虽然 ES6 中,现在正式支持了 __proto__ ,但是其目的是为了与已存在的广泛使用 __proto__ 的库作兼容,ES 官方是推荐避免使用 __proto__ 的,其希望开发者可以通过 Object.setPrototypeOf() 和 Object.getPrototypeOf() 的方式对 __proto__ 进行升级替换。

    ES2016 展望

    ES6 用了 4 年时间整理归纳才发布,相较于 ES5 有了大量的新特性,但是发布周期太长,因此 ES 标准委员会决定缩短它发布的时间,改为以后每年一版,并以年份命名版本,ES6 是 2015 年发布,因此自动获取名 ES2015,而接下来将要发布的将是 ES2016 也就是 ES7(在笔者归纳笔记时早已发布)。因为时间周期更短,因此更新的特性就会少一些,ES2016 将会更新下面一些特性:

    幂运算符号

    ** 运算符的功能与原来 ES5 中的 Math.pow 一致,都用于幂计算。

    console.log(5 ** 2) // 25
    console.log(Math.pow(5, 2)) // 25
    

    Array.Prototype.includes

    用于查找数组中是否包含某项元素,接收两个参数,一个参数是即将搜索元素,第二参数可选,为起始搜索位置:

    const aa = [1, 2, 3, NaN, +0]
    
    console.log(aa.includes(2))  // true
    console.log(aa.includes(2, 2)) // false,从索引 2 开始往后搜索,因为没有找到
    console.log(aa.includes(NaN)) // true
    console.log(aa.includes(-0)) // 此处搜索存在问题,-0 和 +0 认为相同
    

    错误校验

    在严格模式下,在传参时默认赋值和解构传参均会报异常:

    const sayHello1 = (name) => {
        'use strict'
        console.log('My name is ' + name)
    }
    // 在声明时就会报异常
    const sayHello2 = (name = 'Jack') => {
        'use strict'
        console.log('My name is ' + name)
    }
    // 在声明时就会报异常
    const sayHello3 = ({ name }) => {
        'use strict'
        console.log('My name is ' + name)
    }
    sayHello1('Tom') // My name is Tom
    sayHello2() 
    sayHello3({ name: 'Tom' }) 
    

    相关文章

      网友评论

        本文标题:附录拾遗

        本文链接:https://www.haomeiwen.com/subject/nwnhfltx.html