• 我的es6笔记


    变量

    1. let 和 const 声明的变量不在window上了

    2. es6中对于块级作用域里的函数声明实现不统一,要避免在大括号里声明函数,尽量用函数表达式来替代。

    3. let和const声明的变量有暂时性死区

    解构赋值

    1. 解构赋值的本质是模式匹配,冒号左侧是模式,冒号右侧才是要赋值的变量。没有冒号的写法是冒号左右相同时的简写版本。

    2. 解构赋值可以有默认值

    3. 想跳过可以用逗号[, b, c] = [1, 2, 3]

    4. 函数的传参括号其实就相当于一个隐形的数组解构赋值,var [a, b, c] = [1, 2, 3] 可以使用默认值(也是惰性求值的,用到才会计算),也可以嵌套,可以使用rest element (也必须在最后一个),与解构赋值的形式是统一的

    var test = function(a, b, c){
    }
    
    test(1, 2, 3)

    注意有一个区别在于:普通的解构赋值可以使用稀疏数组, 如 let [a, b, c] = [1,  , 3]  ([1, ,3] 在控制台打印出来是{0:1, 2:3, length:3})

    而函数传参的话会报错,必须显式地输入undefined

    函数

    1. 给函数的参数设置默认值,会影响函数的length属性,设了默认值的参数及其后的参数不在统计内。rest参数也不会参与length的统计

    2. 设置了默认值时,为了对默认值表达式求值,传参括号在初始化时会形成一个临时的作用域,即括号里与一个单独的作用域

     3. 在var a = function b(){} 中,b才是函数的name属性,只有当右侧是匿名函数时,name才是a。用new b或者Object.create(b.prototype)创建的对象,在控制台打印时会出现函数名b,显示为 b { }

    4. 箭头函数不能使用 arguments / new / yield

    对象

    1. 对象属性可以使用简写,但属性名表达式和简写不能同时使用,因为容易产生歧义

    const foo = 'bar';
    const bar = 'abc';
     // 报错  ['bar']:'bar' 还是 ['bar']: 'abc' ?
    const baz = { [foo] }; 

    2.  super关键字 只能用在对象方法的简写法中

    3. 扩展运算符用于解构赋值当中时,只能拷贝右侧对象Object.keys()中未被分配(因为rest参数只能在最后,必定先分配之前的变量)的属性

    let obj = {a:1}
    // 下面这两种写法的结果是一样的
    let {...obj1} = obj
    let obj2 = {...obj}

    rest参数是展开运算符的逆运算,但是rest参数必须在最后,rest参数不能跟表达式,而展开运算符没有这些限制

    Class

    1. class就是构造函数,但是不能设置原型上的属性,只能设置原型方法和实例属性。属性不管写在constructor里面还是外面,都会被视为实例属性。

    2. class也有暂时性死区

    3. class大部分是es5标准继承写法的语法糖,但继承方面有本质区别:

    ① class(构造函数)之间也做了继承,为了让子类可以调用父类的静态方法。

    ② 继承时用super先生成了父类实例,然后用子类的构造函数修改。es5时是先生成子类实例,然后用父类的构造函数修改。这样一来对于像Array这样无法通过apply借用的情况,es6也可以完美继承。

    // es6的继承在es5里的写法
    
    function Foo(){}
    
    function Sub(name){
        // 先生成父类实例
        let obj = new Foo(){};
        // 修改隐式原型
        obj.__proto__=Sub.prototype;
        // 修改子类实例
        obj.name = name;
    // 显式返回obj,替换new生成的默认对象 return obj } // 因为构造函数中没有使用this,所以这两种写法是一样的 let sub1 = new Sub() let sub2 = Sub()

    Module

    1. es6模块默认在严格模式下执行

    2. 在es6Module之前,js里只有值传递(高程p70),而import的实现是变量层面的引用传递

    3. webpack模块的import不是真正的import,只是支持import写法,还是按值传递的方式导出变量的

  • 相关阅读:
    算法图解——求Int整型数二进制中1的个数
    图解算法——句子逆序
    图解算法——反转字符串
    图解算法——整数倒置
    《图解算法》之狄克斯特拉算法
    图解算法——合并两个有序链表
    图解算法——括号匹配
    图解算法——两数之和
    #热烈庆祝我党成立100周年#
    jQuery全选反选
  • 原文地址:https://www.cnblogs.com/natsu07/p/10580373.html
Copyright © 2020-2023  润新知