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


相关文章
|
3月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
300 1
|
Python
高阶函数如`map`, `filter`, `reduce`和`functools.partial`在Python中用于函数操作
【6月更文挑战第20天】高阶函数如`map`, `filter`, `reduce`和`functools.partial`在Python中用于函数操作。装饰器如`@timer`接收或返回函数,用于扩展功能,如记录执行时间。`timer`装饰器通过包裹函数并计算执行间隙展示时间消耗,如`my_function(2)`执行耗时2秒。
133 3
|
数据处理 Python
Pandas中的map函数应用
Pandas中的map函数应用
141 2
WK
|
Python
map函数
在Python中,`map()` 是一个内置的高阶函数,接受一个函数和一个或多个可迭代对象作为参数,将指定函数应用于每个元素,并返回包含应用结果的迭代器。若有多个可迭代对象,其元素会并行地传递给函数。`map()` 返回一个迭代器,需用 `list()` 转换。在Python 3中,`map()` 返回迭代器而非列表,并支持 `lambda` 表达式,适用于多种应用场景。注意,当输入的可迭代对象长度不同时,结果仅包含最短对象的长度。
WK
584 2
|
SQL 分布式计算 前端开发
MaxCompute操作报错合集之SQL脚本设置参数set odps.mapred.reduce.tasks=18;没有生效,是为什么
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
413 5
|
存储 JavaScript 前端开发
JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(二)
JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(二)
186 1
|
存储 JavaScript
ES6+新特性-Symbol与Set/Map数据结构
ES6 引入了三种新的数据结构:Symbol、Set和Map。Symbol是唯一且不可变的值,常用于定义对象的独特属性;Set存储不重复值,适合数组去重;Map则是键值对集合,键可为任意类型,提供了更灵活的存储方式。这些新数据结构提供了更高效的操作手段,分别解决了属性命名冲突、数据去重和复杂键值对存储的问题。示例展示了如何使用Symbol、Set和Map进行基本操作。
|
存储 JavaScript 前端开发
JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(一)
JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(一)
154 0
|
JavaScript 前端开发
JavaScript 数组的函数 map/forEach/reduce/filter
JavaScript 数组的函数 map/forEach/reduce/filter
【Python 基础】解释map函数的工作原理
【5月更文挑战第6天】【Python 基础】解释map函数的工作原理

热门文章

最新文章