• ES6相关能用到的东西


    const

    之前的理解不对,正确如下

    变量指向的内存地址所保存的数据不变,对于数值型字符串布尔值这些简单类型的数据,值就保存在变量指向的内存地址中,

    但是对于复合型数据,变量指向的内存地址中保存的是指向实际数据的指针,所以指针是固定的,指向目标内的内存地址中的数据是可以改变的。

    字符串新方法

    includes():返回布尔值,表示是否找到了参数字符串。

    startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。

    endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。

    数值型新方法

     Number.isFinite()用来检查一个数值是否为有限的(finite)。

    如果参数类型不是数值,Number.isFinite一律返回false

    可以用来做数值型check。

    Number.parseInt()    Number.parseFloat()

    ES6 将全局方法parseInt()parseFloat(),移植到Number对象上面,行为完全保持不变。

    Number.isInteger()用来判断一个数值是否为整数。

    Math.sign()方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。

    Math.sign('9') // +1

     **ES2016 新增了一个指数运算符(**)。

     这个运算符的一个特点是右结合,而不是常见的左结合。多个指数运算符连用时,是从最右边开始计算的。

    函数的扩展

    结构配合函数的默认值。

    function fetch(url, { body = '', method = 'GET', headers = {} } = {}) {
      console.log(method);
    }
    
    fetch('http://example.com')

     箭头函数不适用场景

    第一个场合是定义对象的方法,且该方法内部包括this

    const cat = {
      lives: 9,
      jumps: () => {
        this.lives--;
      }
    }

    上面代码中,cat.jumps()方法是一个箭头函数,这是错误的。调用cat.jumps()时,如果是普通函数,该方法内部的this指向cat;如果写成上面那样的箭头函数,使得this指向全局对象,因此不会得到预期结果。这是因为对象不构成单独的作用域,导致jumps箭头函数定义时的作用域就是全局作用域。

    箭头函数没有自己的this而是引用外层的this。

    第二个场合是需要动态this的时候,也不应使用箭头函数。

    var button = document.getElementById('press');
    button.addEventListener('click', () => {
      this.classList.toggle('on');
    });

    上面代码运行时,点击按钮会报错,因为button的监听函数是一个箭头函数,导致里面的this就是全局对象。如果改成普通函数,this就会动态指向被点击的按钮对象。

    另外,如果函数体很复杂,有许多行,或者函数内部有大量的读写操作,不单纯是为了计算值,这时也不应该使用箭头函数,而是要使用普通函数,这样可以提高代码可读性。

    尾递归尾调用优化

    数组的扩展

    扩展运算符

    赋值解构

    function f(x, y, z) {
      // ...
    }

    let args = [0, 1, 2, 3];
    f(...args);

    深拷贝数组

    const a1 = [1, 2];
    // 写法一
    const a2 = [...a1];
    // 写法二
    const [...a2] = a1;

    合并数组

    const arr1 = ['a', 'b'];
    const arr2 = ['c'];
    const arr3 = ['d', 'e'];
    [...arr1, ...arr2, ...arr3]

    字符串转数组

    [...'hello']
    // [ "h", "e", "l", "l", "o" ]

    对象转数组 可以使用map等方法

    let nodeList = document.querySelectorAll('div');
    let array = [...nodeList];

    Array.from

    任何有length属性的对象,都可以通过Array.from方法转为数组,而此时扩展运算符就无法转换。

    可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。

    Array.from([1, 2, 3], (x) => x * x)

    copyWithin()

    它接受三个参数。

    • target(必需):从该位置开始替换数据。如果为负值,表示倒数。
    • start(可选):从该位置开始读取数据,默认为 0。如果为负值,表示从末尾开始计算。
    • end(可选):到该位置前停止读取数据,默认等于数组长度。如果为负值,表示从末尾开始计算。

    这三个参数都应该是数值,如果不是,会自动转为数值。

    [1, 2, 3, 4, 5].copyWithin(0, 3)
    // [4, 5, 3, 4, 5]
  • 相关阅读:
    编码和字符串
    表格边框总结
    自信
    jQuery入门知识点
    ASP.NET MVC路径引用总结
    JavaScript读书笔记(6)-Function
    JavaScript读书笔记(6)-Array RegExp
    JavaScript读书笔记(5)-Object Date
    python 常见的特殊方法
    pipreqs 找当前项目依赖的包
  • 原文地址:https://www.cnblogs.com/have-a-try/p/13534070.html
Copyright © 2020-2023  润新知