ES6-ES11-第一部分-let、const、解构赋值、模板字符串、简化对象写法、箭头函数、函数参数默认值、rest 参数、扩展运算符、Symbol、迭代器、生成器、Promise、Set、Map(二)

简介: ES6-ES11-第一部分-let、const、解构赋值、模板字符串、简化对象写法、箭头函数、函数参数默认值、rest 参数、扩展运算符、Symbol、迭代器、生成器、Promise、Set、Map(二)

3. 变量的解构赋值

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

3.1 数组的结构

const arr = ['apple', 'banner', 'orange']
    // 相当于声明了三个变量 fruit1, fruit2, fruit3 
    // 将数组 arr 中的值按下标顺序赋值给三个变量
    // 数组的解构使用 []
    let [fruit1, fruit2, fruit3] = arr
    console.log(fruit1)
    console.log(fruit2)
    console.log(fruit3)

3.2 对象的解构

const person = {
      name: 'zs',
      age: 13,
      sayHello: function() {
        console.log('Hello!')
      }
    }
    // 对象的解构是按照对象中的属性名将属性值赋值给相同名对应的变量
    let {name, age, sayHello} = person
    console.log(name)
    console.log(age)
    sayHello()
    // 对象解构赋值的用处
    // person.sayHello() 麻烦
    // 解构出来,直接调用,不用每次写对象名
    sayHello()

// 对象解构可以单独解构出其中的属性
    let {sayHello} = person
    sayHello()

频繁使用对象方法、数组元素,就可以使用解构赋值形式

4. 模板字符串

模板字符串(template string)是增强版的字符串,用反引号( ` )(键盘esc键下面)标识,特点:

  1. 字符串中可以出现换行符
  2. 可以使用 ${xxx} 形式输出变量

4.1 模板字符串声明

let str = `声明了一个模板字符串`
    console.log(str)

4.2 字符串中可以出现换行符

let str = `
      <ul>
        <li></li>  
        <li></li>  
        <li></li>  
      </ul>
    `
    console.log(str)

4.3 可以使用 ${xxx} 形式输出变量

let name = 'zs'
    let age = 13
    let str = `我的名字是${name}, 我的年龄为${age}`
    console.log(str)

当遇到字符串与变量拼接的情况使用模板字符串

5. 简化对象写法

ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。

let name = 'zs'
    let age = 12
    let sayHello = function() {
      console.log('你好!')
    }
    let person1 = {
      name,
      age,
      sayHello,
      sayHello2() {
        console.log('hello!')
      }
    }
    // 相当于
    // let person2 = {
    //   name: name,
    //   age: age,
    //   sayHello: sayHello,
    //   sayHello2: function() {
    //     console.log('hello!')
    //   }
    // }
    console.log(person1.name)
    console.log(person1.age)
    person1.sayHello()
    person1.sayHello2()

6. 箭头函数

ES6 允许使用箭头(=>)定义函数。

// 定义一个普通的函数
    let f1 = function() {
      console.log('hello')
    }
    // 定义箭头函数
    let f2 = () => {
      console.log('world')
    }
    f1()
    f2()

6.1 箭头函数 this 指向声明时所在作用域下 this 的值

箭头函数的 this 是静态的. this 始终指向函数声明时所在作用域下的 this 的值

function getThis1() {
        console.log(this)
      }
      let getThis2 = () => {
        console.log(this)
      }
      // 直接调用
      getThis1()
      getThis2()

function getThis1() {
        console.log(this.name)
      }
      let getThis2 = () => {
        console.log(this.name)
      }
      window.name = 'window'
      const NAME = {
        name: 'NEW_NAME'
      }
      // 使用call方法改变this指向
      getThis1.call(NAME)
      getThis2.call(NAME)

箭头函数的this指向并没有发生更改,依旧指向声明时候作用域下的this(window)

6.2 箭头函数不能作为构造实例化对象

let Person = (name, age) => {
        this.name = name
        this.age = age
      }
      let p = new Person('zs', 12)
      console.log(p)

6.2.1 函数this指向

函数this的指向在函数定义的时候是不能确定的,在调用执行函数时才能明确函数this的指向。

  1. 函数名() 调用函数,this指向window
  2. 对象名.函数()this指向调用这个函数的对象
  3. 函数作为事件处理函数时,this指向触发事件的元素
  4. 构造函数中的this指向new出来的对象
  5. 定时器函数中的this指向window

6.3 不能使用 arguments 变量

// 普通函数可以使用 arguments 变量获取传入的参数值
      let fn1 = function() {
        console.log(arguments)
      }
      // 箭头函数不能使用 arguments 变量获取传入的参数值
      let fn2 = () => {
        console.log(arguments)
      }
      fn1(1,2,3)
      fn2(1,2,3)

6.4 箭头函数的简写

6.4.1 如果形参只有一个,则小括号可以省略

let fn3 = n => {
        console.log(n)
      }
      fn3(100)

6.4.2 函数体如果只有一条语句,则花括号可以省略

函数体如果只有一条语句,则花括号可以省略,函数的返回值为该条语句的

执行结果

let fn4 = n => console.log(n)
      fn4(100)
      let fn5 = n => n*n
      // 相当于:
      // let fn5 = n => {
      //   return n*n
      // }
      let res = fn5(100)
      console.log(res)

6.5 箭头函数实践

6.5.1 点击 div 2s 后颜色变成『粉色』

普通函数实现:

// 获取元素
      let div = document.querySelector('div')
      // 绑定事件
      div.addEventListener( 'click', function() {
        // 回调函数使用普通函数
        // 由于定时器函数的this指向window
        // 需要保存this,事件处理函数指向触发事件的元素
        let _this = this
        setTimeout( function() {
          _this.style.background = 'pink'
        }, 2000 )
      } )

箭头函数实现:

// 获取元素
      let div = document.querySelector('div')
      // 绑定事件
      div.addEventListener('click', function () {
        // // 回调函数使用普通函数
        // // 由于定时器函数的this指向window
        // // 需要保存this,事件处理函数指向触发事件的元素
        // let _this = this
        // setTimeout(function () {
        //   _this.style.background = 'pink'
        // }, 2000)
        // 箭头函数实现
        // 由于箭头函数this指向定义函数作用域下的this,所以箭头函数this指向触发事件的元素
        setTimeout(() => {
          this.style.background = 'pink'
        }, 2000)
      })

6.6 箭头函数小结

  • 箭头函数适合与 this 无关的回调. 定时器, 数组的方法回调
  • 箭头函数不适合与 this 有关的回调. 事件回调, 对象的方法


相关文章
【Java每日一题,Map和字符串】Ananagrams
【Java每日一题,Map和字符串】Ananagrams
|
5月前
|
SQL 分布式计算 前端开发
MaxCompute操作报错合集之SQL脚本设置参数set odps.mapred.reduce.tasks=18;没有生效,是为什么
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
161 5
|
6月前
|
Go
|
6月前
|
存储 C++ 容器
Map容器-构造和赋值讲解
Map容器-构造和赋值讲解
52 0
|
6月前
|
算法 测试技术 C#
【map】【滑动窗口】【字典树】C++算法:最长合法子字符串的长度
【map】【滑动窗口】【字典树】C++算法:最长合法子字符串的长度
|
6月前
|
前端开发
箭头函数与promise
箭头函数与promise
45 0
|
6月前
|
关系型数据库 PostgreSQL
PostgreSQL 的哪些参数不能通过ALTER SYSTEM SET 修改
在 PostgreSQL 中,有一些参数是不能通过 `ALTER SYSTEM SET` 语句进行动态修改的,这些参数通常需要在 PostgreSQL 的配置文件中进行手动修改。以下是一些不能通过 `ALTER SYSTEM SET` 修改的常见参数: 1. **track_activities** 2. **track_counts** 3. **track_io_timing** 4. **track_functions** 5. **track_activity_query_size** 6. **track_commit_timestamp** 7. **shared_preload
118 0
|
6月前
|
Java 机器人 开发者
使用Map批量赋值进行表单验证的实践
在Web应用程序中,表单验证是一个必不可少的环节,它可以确保用户提交的数据合法且完整。然而,传统的表单验证方法往往需要手动设置每一个验证规则,这无疑增加了开发者的负担。通过使用Map批量赋值功能,我们可以更高效地将表单数据批量赋值给验证对象,然后根据验证对象的属性进行验证。
|
JSON 数据格式
JSON字符串与Map互转
JSON字符串与Map互转
394 0
pd.set_option()参数详解
pd.set_option()参数详解
162 0