0
点赞
收藏
分享

微信扫一扫

JavaScript ES6新特性(笔记)

Ichjns 2022-03-12 阅读 55

文章目录

1. let与const

1.1 let

  • let声明的变量有块级作用域

  • let不存在变量提升

  • 在同一作用域中,let声明的变量不能重复声明

  • let存在暂时性死区

    // 说明解析器会提前解析,但是不会提升
    let i = 10
    if (true) {
      console.log(i); // Cannot access 'i' before initialization
      let i = 20
    }
    

1.2 const

  • 声明常量,不能被改变
  • 具有块级作用域
  • 使用const声明时必须要赋值

2. 解构赋值

2.1 解构赋值定义

通过解构赋值,可以将属性、值从对象或数组中取出,赋值给其他变量

2.2 数组解构

// 正常解构
let arr = [2, 4, 6]
let [a, b, c] = arr
console.log(a, b, c); // 2 4 6

// 数组长度大于要解构的长度
let arr1 = [2, 4, 6, 8]
let [a1, b1, c1] = arr1
console.log(a1, b1, c1); // 2 4 6

// 数组长度小于要解构的长度
let arr2 = [2, 4]
let [a2, b2, c2] = arr2 // c2相当于初始化未赋值
console.log(a2, b2, c2); // 2 4 undefined

2.3 对象解构

let obj = {
  name: "小红",
  age: 18
}
let { name, age } = obj
console.log(name, age); // 小红 18

// 别名方式(自定义名字)
let obj = {
  name: "小红",
  age: 18
}
// 因为对象是无序的,不使用别名的话,只能通过key去获取
let { name: myName, age: myAge } = obj
console.log(myName, myAge); // 小红 18

3. 箭头函数

3.1 基本语法

// 基本语法
let fn = (形参列表) => {
  // 代码块
}

// 只有一个形参时,可以省略小括号
let fn1 = num => {
  // 代码块
}

// 代码块只有return时,可以省略花括号
let fn2 = num => num * num

3.2 this指向

  • 箭头函数中的this,取决于声明时所在的执行上下文

  • 箭头函数的arguments没有实参

  • 箭头函数中的this不能直接修改

  • 箭头函数没有构造器,不能被new

  • 箭头函数的this会因为外层执行上下文的改变而改变

    // 下面两个打印,很明显箭头函数的this改变了
    function fn() {
      console.log("普通函数的this:", this);
      return () => {
        console.log("箭头函数的this:", this);
      }
    }
    
    let obj = {
      name: "小红"
    }
    fn()() // 普通函数的this ==> window,箭头函数的this ==> window
    fn.call(obj)() // 普通函数的this ==> obj,箭头函数的this ==> obj
    

4. 展开语法

4.1 剩余参数

4.1.1 基本用法
// 因为箭头函数的arguments没有实参
// 可以使用剩余参数去获取
function fn(a, ...args) {
  console.log(a); // 2 
  console.log(args); // [4, 6, 8, 9]
}
fn(2, 4, 6, 8, 9)
4.1.2 剩余参数配合解构赋值
// 数组解构
let arr = [2, 4, 6, 8]
let [a, ...args] = arr
console.log(a); // 2
console.log(args); // [4, 6, 8]

// 对象解构
let obj = {
  name: "小红",
  age: 18,
  num: 100
}
let { name: myName, ...args } = obj
console.log(myName); // "小红"
console.log(args); // {age: 18, num: 100}

4.2 扩展运算符

4.2.1 可迭代对象
// 可以把数组的每一个都给展开
let arr = [2, 4, 6, 8]
console.log(...arr); // 2 4 6 8
console.log([...arr]); // [2, 4, 6, 8]

// 字符串也可以
let str = "1234"
console.log(...str); // "1" "2" "3" "4"

// 集合也可以
let set = new Set([2, 4, 6, 8])
console.log(...set); // 2 4 6 8
4.2.2 对象
// 对象不可以,可以发现展开的话,只能为可迭代对象
let obj = {
  name: "小红",
  age: 18,
  count: 100
}
console.log(...obj); // Found non-callable @@iterator
// 但是可以添加对象中(浅拷贝),再次添加到对象中没有使用迭代器
console.log({ ...obj }); // {name: '小红', age: 18, count: 100}
// 数组不行,只能为对象
console.log([ ...obj ]); // obj is not iterable

5. 模板字符串

5.1 基本语法

// 1.`` 表示模板字符串,在${}中可以放js代码(只能用不能写)
// 	  	就是可以使用变量、调用函数,但是不能声明变量和声明函数
// 2.模板字符串可以换行,普通字符串不可以
let p = "我是p标签"
let span = "我是span标签"
let str = `<div>
            <p>${p}</p>
            <span>${span}</span>
          </div>`
console.log(str);
// 和字符串一样,空字符也算长度
let str = `                `
console.log(str.length); // 16
举报

相关推荐

0 条评论