• es6 学习笔记


      1、let、const

      let和const作用类似于var,区别是const声明的是一个制度的变量,一单声明之后,常量的值就不能变。

      比如:

        

      这样的话,a能正常输出,但是b会报错

      let和var的区别:

            

         

      因为,在var的场景中,if和for的声明的是全局变量,而在let的场景下,只会在声明的代码快里面有效

    2、str.repeat(n) 返回一个新的字符串, 将元字符串重复n次

         

    3、拼接字符串

      模版字符,拼接字符串使用${}来引用变量, 用`来标记起始, 所有的空格和缩进都会都会被保留下来,并输出。

        

    4、String.raw

      使用String.raw作为模版字符的前缀,则该模板是原始的,反斜线不再是特殊字符, 也不会被解释成换行符。

         

    5、Number

      Number.isFinite(): 用来检测一个数值是不是非无穷的

      Number.isNaN(): 用来检测一个字符是不是NaN

      Number.isInteger(): 用来检测一个数值是不是整数,

            但是这个方法的Number.isInteger(23)等价于Number.isInteger(23.0)

    6、Math

      Math.trunc(): 去除数值的小数部分,返回整数

      Math.sign(): 判断一个数是正数、负数还是零,

           返回值:整数:1,负数:-1,0:0,-0:-0,其他值:NaN

      Math.cbrt(): 计算一个值的立方根

      Math.fround():返回一个值的单精度浮点数,某个数的有效数字位数超过7位,超出的部分会自动四舍五入

      Math.hypot(): 返回所有参数的平方和的平方根  

      Math.expm1(x): ex - 1

      Math.log1p(x): 返回1 + x的自然对数,如果x小于-1, 返会NaN

      Math.log10(x): 返回以10为底的x的对数,如果x小于0,则返回NaN

      Math.log2(x):返回以2为底的x的对数。如果x小于0,则返回NaN

       Math.sinh(x): 返回x的双曲正弦

       Math.cosh(x): 返回x的双曲余弦

       Math.tanh(x): 返回x的双曲正切

       Math.asinh(x): 返回x的双曲asinh

       Math.acosh(3): 返回x的反双曲余弦

       Math.atanh(3): 返回x的反双曲正切

    7、Array.from 用于将类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构Set和Map)转为真正的数组

       

      其中,Array.from()将字符串转化成数组之后,返回字符串的长度。

      Array.from(string).length;

    8、Array,of() 将值转换成数组

       

    9、arr.find(callback()) 找出第一个符合条件的数组成员和位置,可以发现NaN

      它的参数是一个回调函数,所有数组成员依次执行该回调函数,回调函数接受三个参数,(当前的值、当前的位置和原数组)。直到找出第一个返回值为true的成员,然后返回该成员,找到了就不再继续往下查找了。如果没有符合条件的成员,则返回undefined,

       

    10、arr.findIndex(callback()) 找出第一个符合条件的数组成员的位置,如果都不符合,返回-1,可以发现NaN

       

    11、fill() 使用给定的值,填充一个数组

        

      除此之外,fill()接受第二个和第三个参数, 用于指定填充的起始位置

    12、entries() 、keys() 、 values()

      用于遍历数组,返回的是一个遍历器,可以使用for-of循环进行遍历。

      entire()是对键值对的遍历

      keys()是对键名的遍历

      values()是对键值的遍历

       

      

      待解决,不懂为什么values()的方法报错

    13、object

      (1) destructuring 解构

      我们平常的话,可以这样写对象

       

      使用es6的话,如下:

       

      也可以反过来,如下:

       

      (2) 属性名表达式

        在原本中,给对象赋值,可以使用标识符作为属性名,也可以使用表达式作为属性名(将表达式放在[]中),也可以痛多对向字面量,用标识符作为属性名。

        但是,在es6中,允许字面量定义对象的时候,用[]放置表达式作为属性名

          

      (3) Object.is() 用来比较两个值是否严格相等,与===相似,区别在于在===里,=0 === -0 是对的, NaN === NaN 是错的,但是在Object.is中,Object.is(+0, -0) 是错的, Object.is(NaN, NaN)是对的

      (4) Object.assign() 用来讲源对象(source)的所有可枚举的属性,复制到目标对象(target),他至少需要两个对象作为参数,第一个参数是target, 后面的参数都是source, 只要有其中一个参数不是对象,就会抛出TypeError

        

      注意:如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性

        

      除此之外:

      Object.assign也可以用来处理数组,数组位置相同的地方将被覆盖

      

      可以用来为对象添加属性

      

      可以用来为对象添加方法

       

      克隆对象

      在JS里子类利用Object.getPrototypeOf去调用父类方法,用来获取对象的原型。用它可以模仿Java的super

      

    14、function

      (1) 使用默认参数

         

      (2) rest参数, 格式为(...变量名),也叫做不定参数,用于获取函数的多余参数,这样就不需要使用arguments对象了

        rest参数搭配的变量是一个数组,将该变量的多余参数放入数组中。

          

      (3) 扩展运算符, 是三个点(...), 它就好比是rest参数的你运算,讲一个数组转为用(,)分隔的参数序列,该运算符主要用于函数调用,它允许传递数组或者类数组直接作为函数的参数而不用通过apply

         

      (4) 箭头函数: =>

        

        

        箭头函数有几个使用注意点。
          1.函数体内的this对象,即绑定定义时所在的对象,而不是使用时所在的对象.并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,它的this是继承外面的,因此内部的this就是外层代码块的this。
          2.不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
          3.不可以使用arguments对象,该对象在函数体内不存在。
          上面三点中,第一点尤其值得注意。this对象的指向是可变的,但是在箭头函数中,它是固定的。  

     15、Set: 数据结构Set类似于数组,但是成员的值都是唯一的,没有重复的值

      (1) 基本用法

        

      (2) 实例的属性

        Set.prototype.constructor: 构造函数,默认就是Set函数

        Set.prototype.size: 返回Set实例的成员总数

          

      (3) 实例的方法

        add(value): 添加某个值,返回Set结构本身

        delete(value): 删除某个值,返回一个布尔值,表示删除成功

        has(value): 返回一个布尔值,表示是否为Set的成员

        clear(): 清除所有成员,没有返回值

           

       (4) 遍历操作

        keys(): 返回一个键名的遍历器
        values(): 返回一个键值的遍历器
        entries(): 返回一个键值对的遍历器
        forEach(): 使用回调函数遍历每个成员

         由于Set结构没有键名,只有键值(或者说键名和键值是同一个值),所以key方法和value方法的行为完全一致。

           

    16、WeakSet: 和Set一样,不存储重复的值,但是WeakSet的成员只能是对象,不能是其他类型的值。

      方法:

        add(value)

        delete(value)

        has(value)

      因为WeakSet没有size的属性,没有办法遍历它的成员

    17、Map: 是一个“超对象”,其 key 除了可以是 String 类型之外,还可以为其他类型(如:对象)他的方法和 Set 差不多:

      (1)方法:

        size:返回成员总数,该方法返回的是Map本身,因此可以采用链式写法
        set(key, value):设置key所对应的键值,返回整个Map结构。如果key已经有值,则键值会被更新,否则就新生成该键。
        get(key):设置key所对应的键值,然后返回整个Map结构。如果key已经有值,则键值会被更新,否则就新生成该键。
        has(key):返回一个布尔值,表示某个键是否在Map数据结构中。
        delete(key):删除某个键,返回true。如果删除失败,返回false
        clear():清除所有成员,没有返回值。

      (2)遍历器

        keys():返回键名的遍历器。
        values():返回键值的遍历器。
        entries():返回所有成员的遍历器。

            

        如果没有使用rest参数的话,就使用for-of去遍历

    18、WeakMap: WeakMap结构与Map结构基本类似,唯一的区别是它只接受对象作为键名(null除外),不接受原始类型的值作为键名,而且键名所指向的对象,不计入垃圾回收机制。

      WeakMap与Map在API上的区别主要是两个:

      一是没有遍历操作(即没有key()、values()和entries()方法),也没有size属性;
      二是无法清空,即不支持clear方法。这与WeakMap的键不被计入引用、被垃圾回收机制忽略有关。
      因此,WeakMap只有四个方法可用:get()、set()、has()、delete()。

    19、Iterator: 遍历器

       (1)Iterator的作用有三个:

        1/是为各种数据结构,提供一个统一的、简便的访问接口;

        2/使得数据结构的成员能够按某种次序排列;

        3/是ES6创造了一种新的遍历命令for...of循环,Iterator接口主要供for...of消费。

       (2) Iterator的遍历过程是这样的。

        创建一个指针,指向当前数据结构的起始位置。也就是说,遍历器的返回值是一个指针对象。
        第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。
        第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。
        调用指针对象的next方法,直到它指向数据结构的结束位置。

      (3)迭代数组结构度必须实现一个名为Symbol.iterator的方法,该方法返回一个该结构元素的迭代器

           

      (4) 结构赋值

        对数组和Set结构进行解构赋值时,会默认调用iterator接口

          

    20、Generator

      该函数是一个函数内部状态的遍历器,也就是说该函数是一个状态机。形式上,它是一个普通函数,但是有两个特征:

      (1) function命令与函数名之间有*

      (2) 内部使用yield语句,定义遍历器的每个成员,即不同的内部状态

      (3) yield*: 表明返回的是一个遍历器

    21、Class   

      constructor内定义的方法和属性是实例对象自己的,而constructor外定义的方法和属性则是所有实例对象可以共享的。
    Class之间可以通过extends关键字实现继承,这比ES5的通过修改原型链实现继承,要清晰和方便很多。
    上面定义了一个Cat类,该类通过extends关键字,继承了Animal类的所有属性和方法。
      super关键字,它指代父类的实例(即父类的this对象)。子类必须在constructor方法中调用super方法,否则新建实例时会报错。
    这是因为子类没有自己的this对象,而是继承父类的this对象,然后对其进行加工。如果不调用super方法,子类就得不到this对象。
    ES6的继承机制,实质是先创造父类的实例对象this(所以必须先调用super方法),然后再用子类的构造函数修改this。

  • 相关阅读:
    MySQL 一致性读 深入研究
    Operating System Error Codes
    5分钟了解MySQL5.7的Online DDL雷区
    pt-osc原理、限制、及与原生online-ddl比较
    学习笔记:Rick's RoTs -- Rules of Thumb for MySQL
    学习笔记:The Best of MySQL Forum
    学习笔记:Analyze MySQL Performance及慢日志的开启
    MySQL: Building the best INDEX for a given SELECT
    学习笔记:ALTERing a Huge MySQL Table
    Google common_schema 2.2 documentation
  • 原文地址:https://www.cnblogs.com/qzccl/p/6542626.html
Copyright © 2020-2023  润新知