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 有关的回调. 事件回调, 对象的方法


相关文章
|
2月前
|
C++ 容器
set容器-构造和赋值讲解
set容器-构造和赋值讲解
17 0
|
9月前
|
前端开发 JavaScript API
ES6-ES11-第一部分-let、const、解构赋值、模板字符串、简化对象写法、箭头函数、函数参数默认值、rest 参数、扩展运算符、Symbol、迭代器、生成器、Promise、Set、Map(五)
ES6-ES11-第一部分-let、const、解构赋值、模板字符串、简化对象写法、箭头函数、函数参数默认值、rest 参数、扩展运算符、Symbol、迭代器、生成器、Promise、Set、Map(五)
|
7月前
|
SQL 分布式计算 DataWorks
使用`SET`语句来定义变量并为其赋值
使用`SET`语句来定义变量并为其赋值
145 4
|
7月前
|
SQL 分布式计算 DataWorks
可以使用SET语句来定义变量并为其赋值
可以使用SET语句来定义变量并为其赋值
40 2
|
8月前
|
前端开发 JavaScript
将使用回调函数作为参数的函数改造为返回 Promise 的一个具体例子
将使用回调函数作为参数的函数改造为返回 Promise 的一个具体例子
45 0
|
9月前
|
前端开发
前端学习笔记202306学习笔记第四十二天-函数返回promise
前端学习笔记202306学习笔记第四十二天-函数返回promise
31 0
|
9月前
|
前端开发 API 网络架构
ES6-ES11-第一部分-let、const、解构赋值、模板字符串、简化对象写法、箭头函数、函数参数默认值、rest 参数、扩展运算符、Symbol、迭代器、生成器、Promise、Set、Map(六)
ES6-ES11-第一部分-let、const、解构赋值、模板字符串、简化对象写法、箭头函数、函数参数默认值、rest 参数、扩展运算符、Symbol、迭代器、生成器、Promise、Set、Map(六)
|
2月前
|
前端开发 JavaScript
如何处理 JavaScript 中的异步操作和 Promise?
如何处理 JavaScript 中的异步操作和 Promise?
15 1
|
2月前
|
前端开发 JavaScript
在JavaScript中,什么是promise、怎么使用promise、怎么手写promise
在JavaScript中,什么是promise、怎么使用promise、怎么手写promise
25 4
|
2月前
|
前端开发 JavaScript 开发者
JavaScript 中的异步编程:Promise 和 Async/Await
在现代的 JavaScript 开发中,异步编程是至关重要的。本文将介绍 JavaScript 中的异步编程概念,重点讨论 Promise 和 Async/Await 这两种常见的处理异步操作的方法。通过本文的阐述,读者将能够更好地理解和应用这些技术,提高自己在 JavaScript 开发中处理异步任务的能力。