乐趣区

关于前端:ES6和this关键字

ES6

  • 变量定义:

let

const

应用形式跟 var 是一样的。

跟 var 的区别:

  1. 没有预解析
  2. 不能反复定义
  3. 会自带块级作用域 – 定义在全局的变量不在 window 中,有大括号的时候会限度在大括号中
  4. const 定义就必须赋值
  5. const 的值不容许批改
  • 模板字符串:

应用反引号定义字符串。

跟单引号双引号字符串相比的益处:

  1. 分多行定义一个字符串,在控制台多行显示
  2. 在模板字符串中能够间接解析变量,省略拼接
  • 箭头函数:

语法:

() => {} // 简化匿名函数

特点:

  1. 当只有一个形参的时候,能够省略小括号
  2. 当大括号中只有一行代码的时候,能够省略大括号,这行代码中如果有 return,就必须省略 return
  • 形参能够间接赋值

    带有默认值的形参,这个形参就必须放在所有形参的最初。这个形参在调用函数的时候能够传递实参,也能够不传递。

  • 解构赋值

    疾速的批量的将对象或数组中的数据赋值给变量。

    对象:

    var {属性名, 属性名} = 对象
    var {属性名: 变量, 属性名: 变量} = 对象
    var {属性名: {属性名: 变量}} = 对象

    数组:

    var [变量, 变量] = 数组
    var [变量, [变量, 变量]] = 数组

    数组解构能够实现一行代码替换两个变量的值:

    var [a, b] = [b, a]
  • 对象的简写模式

    当对象的属性名和值所应用的变量同名,就能够简写。

    var name = '张三'
    var age = 12
    var obj = {
        name: name,
        age: age
    }
    // 简写成
    var obj = {
        name,
        age
    }

    办法的简写:

    var obj = {eat: function() {}}
    // 简写为:var obj = {eat() {}}
  • map 数据

    是一个属性能够是任意类型的对象。

    var obj = {name: '张三'}
    var map = new Map([[obj, '对象'], ['age': 12]])
  • set 数据

    是一个对象属性组成的汇合。没有反复元素的数组。

    利用 set 进行数组去重:

    var arr = [1,1,2,2,2,2]
    var brr = [...new Set(arr)]
  • for of

    是 es6 提供的一种遍历数据值的语法。能够遍历字符串、数组、map、set

  • … 运算符

    能够将多个元素合并为一个数组。当 ... 数组 作为形参的时候,会将多个实参合并为一个数组

    能够将对象或数组开展成多个键值对或多个值。

    var obj = {
        name: '张三',
        age: 12
    }
    var pbj = {
        ...obj,
        sex: '男'
    }

    ... 数组 作为实参的时候,将数组开展成多个数据对应多个形参。

    var arr = [1,5,9,3,4,7,6,2,8]
    Math.max(...arr)

this 关键字

this 是 js 中的一个关键字,在不同的作用域中示意的数据是不一样的。

全局 – window

一般函数 – window

自调用函数 – window

定时器 – window

事件函数 – 事件源标签

对象办法 – 对象

构造函数 – new 进去的对象

箭头函数 – 下级作用域中的 this

当函数定义好后,不能确定 this 的含意,要害取决于这个函数最终的调用形式。

扭转 this 的含意:

call:调用函数并扭转 this

函数.call(新的 this, 原函数须要的实参 1, 原函数须要的实参 2, ...)

apply:调用函数并扭转 this

函数.apply(新的 this, [原函数须要的实参 1, 原函数须要的实参 2, ...])

bind:复制一个函数失去新的函数并扭转 this

函数.bind(新的 this) // 返回新的函数
退出移动版