SE6新特性


(1)let变量声明

  1.变量声明不能重名

  2.块级作用域

  3.不存在变量提升

  4.不影响作用域链

(2)const变量声明

  1.声明时需要赋初值

  2.一般声明常量时使用大写,且不可修改

  3.块级作用域

  4.对于数组和对象的修改由于未改变变量指向的地址,因此不算修改,不会报错

(3)变量的解构赋值

  ES6 允许按照一定模式从数组和对象中提取值,对变量进行赋值。

  1.数组:let A = ['1','2','3','4']    let [a,b,c,d] = A,   console.log(a)

  2.对象:let A = { .... }        let {name,age} = A;             【let后接与A中的属性名相同即可】

(4)模版字符串``(英文模式下左上角第二行第一个)

  特点:1.同样是字符串的一种

     2.字符串中可以加上换行符

     3.可以变量拼接${变量名}

(5)简写对象

  当对象的key值和value值一样时,可以只写一个

  例如: let name = '1234'; let A = {name:name 【原来的写法】  =>   name【简写是这样】}

  函数可以省略:和function

(6)箭头函数   ()=>{ ... }

  特点:

    1.括号内可以携带参数。当只有一个参数时,可以省略括号

    2.this的指向不会更改,即在声明时this指向谁,那么在使用时仍然会调用谁,不会被call更改   

    3.当{}内只有一句代码时,可以省略{},且这句代码的返回值被当做整个函数的返回值

(7)函数参数的默认值

  1.允许对函数的形参赋初始值,如果未传入该形参的值则使用初始值,否则使用传入的值

  2.可以和解构赋值结合使用

  3.引入rest参数(...args),又被称为剩余参数,即将你未接收的参数都收集起来,书写时需要放在所有需要接收的形参之后【不清楚...的可以先看8】

(8)扩展运算符(...)

  1.概念:扩展运算符能将数组转化为逗号分隔的参数序列,简单来说就是将数组结构解除,将其中的元素拿出来依次使用。

  2.应用:

    数组合并    const A = [...B,...C]【B和C都是数组】

    数组克隆    const A = [...B]        浅拷贝

    可以将伪数组转化为真正的数组

(9)基本数据类型symbol

  1.特点:值唯一,用于解决命名冲突,如 A = Symbol('a')   B = Symbol('a')此时A不等于B,如果使用 Symbol.for('')则相等

      不能与其他数据类型进行运算

      定义的对象属性不能使用for..in..遍历,需要使用Reflect.ownKeys来获取对象的所有键值

  2.使用:向对象中添加属性或方法,不确定对象中原本有没有这个属性和方法时,可以使用Symbol,但是这时一定要使用Symbol.for('')来赋值

      const A = {   name : 'nihao',    [Symbol.for('say')]: function(){  console.log("nihao!") } } 

      A[Symbol.for('say')]()

  3.Symbol的内置值,共11个(暂时空着)

    console.log(o instanceof Person) ;

(10)迭代器

  用于遍历array、arguments、set、map等,获取到的是value值,而不是索引。

  原理:

    1.创建一个指针对象,使其指向当前数据结构的起点

    2.第一次调用对象的next方法,此时指针会指向数据结构的第一个成员

    3.不断的调用next方法,指针不断后移,直到指向最后一个成员

    4.每次调用next方法都会包含一个value和done属性的对象

(11)生成器  

  写法:function * gen(){ ... }           

  调用:let A = gen()         A.next()

  yield:函数代码的分割符,每次调用next方法会执行到一个yield为止,且yield语句后面的会作为next方法的返回对象中value的值 

  next:next方法可以携带实参,传入的实参会作为yield语句的返回值

  使用:因为是分段调用且需要用next方法‘激活’下一段代码,因此可以作为异步调用的实现区

(12)promise:异步编程的新的解决方案(内容很多,会写到新随笔中)

(13)set和map

  1.属性:

    size:返回元素个数

  2.方法

    add:  【set】

    set:添加   【map】

    get:获取   【map】

    delete:删除 

    clear:清空

    has:检测是否含有

  3.可以使用扩展运算符(...)和(for.. of ..遍历)

(14)class

  1.static关键词标注属性,即可在类的外部无需实例化对象调用。   static name = "123"

  2.构造函数:class在实例化时调用的函数,作用是初始化变量       constructor(args【参数】){ ... }

          子类构造函数:需要调用父类的构造函数,使用super函数。       constructor(args【参数】){  super(【参数】)  ... }

  3.继承:extands关键字,即子类继承父类的一切           class   A    extands   B(){ .. }

  4.方法重写:子类继承父类时,需要用到父类的函数,但功能不同时可以对原方法重写 

  5.getter和setter: 当在class外需要访问到使用private(私有)关键字修饰的属性时,需要使用get和set函数。   eg:get 【函数名】(){ .. }

(15)数值扩展

  1.Number.EPSILON:javascript表示的最小精度,用于数值比较

  2.进制:0b(2)  0o(8) 0x(16)

  3.Number.isfinite:判断一个数是不是有限数

  4.Number.isNaN:判断一个数是否是NaN

  5.Number.parseInt / parseFloat  :字符串转整数或浮点数

  6.Number.isInteger:判断一个函数是否是整数

  7.Math.trunc:将小数部分抹掉(同样的还有floor等)

  8.Math.sign:判断一个数是正数、负数还是0

(16)对象方法扩展

  1.Object.is:判断两个值是否相等,类似于===。Object.is(NaN,NaN)   =>   true,NaN===NaN=> false

  2.Object.assign:对象的合并   Object.assign(A,B)

  3.Object.get/setPrototypeOf   获取或设置原型对象

(17)模块化

  1.暴露,将一个模块中的js代码暴露出去供给其他模块的js代码使用,使用export

    分别暴露:在需要暴露的变量/函数前添加export暴露即可       export  name = "123"

    集中暴露:正常书写模块中的js代码,在js文件的末尾将需要暴露的内容全部暴露。   export {  .. . }

    默认暴露:export default { ... }

  2.引用:引入另一个模块中的js文件中的暴露变量/方法

    普通写法:import * as  A   from  ‘【文件位置】’  (注意,在正常的引入中A.name即可访问,但若采用的是默认暴露的形式则要用A.default.name)

    解构赋值:import { .name..  }   from ''    (默认暴露:import { default as  A }   from ''  )

    简便写法(仅针对默认暴露):import   A   from  ‘【文件位置】’

相关