0
点赞
收藏
分享

微信扫一扫

(十)ES6 声明与表达式

程序员伟杰 2022-04-07 阅读 24

文章目录

一、let 和 const

1. let 和 const 的基本用法

  • let:用来代替 var 声明变量(变量一旦初始化之后,还可以重新赋值)
  • const:用来声明常量(常量一旦初始化之后,就不能重新赋值了,否则会报错)
  • const使用时的注意事项:
    • 使用const声明常量一旦声明就必须立即初始化不能留到以后赋值
    • const声明的常量允许在不重新赋值的情况下修改它的值(主要针对引用数据类型)

2. let、const 与 var 的区别

(1) 重复声明
  • 重复声明:已经存在的变量或常量,又声明一遍
  • var 允许重复声明,let、const 不允许重复声明
(2) 变量提升
  • var 会提升变量的声明到当前作用域的顶部
  • let、const 不存在变量提升
(3) 暂时性死区
  • 暂时性死区:只要作用域内存在 let、const,它们声明的变量或常量就自动 “绑定” 这个区域,不再受到外部作用域的影响
  • let、const 存在暂时性死区;var 不存在
(4) window 对象的属性和方法
  • 全局作用域中,var 声明的变量,通过 function 声明的函数,会自动变成 window 对象的属性或方法;而 let、const 不会
(5) 块级作用域
  • let、const 存在块级作用域;var 不存在
  • 作用域链:内层作用域 —> 外层作用域 —> … —> 全局作用域在这里插入图片描述
  • 有哪些块级作用域:{}、for、while、do while、if、switch

二、解构赋值

  • 解构赋值:解析某一数据的结构,将我们想要的东西提取出来,赋值给变量或常量

1. 数组的解构赋值

(1) 原理
  • 模式(结构)匹配 [] = [1, 2, 3];
  • 索引值相同的完成赋值
    const [a, b, c] = [1, 2, 3];
    不取的可以直接用逗号跳过
    const [a, [, , b], c] = [1, [2, 4, 5], 3]; //1 5 3
(2) 默认值
  • 默认值的基本用法:
    const [a, b] = []; //undefined undefined
    const [a = 1, b = 2] = []; //1 2
  • 默认值的生效条件:
    只有当一个数组成员严格等于(===)undefined 的时候,对应的默认值才会生效
    const [a = 1, b = 2] = [3, 0]; //3 0
    const [a = 1, b = 2] = [3, null]; //3 0
    const [a = 1, b = 2] = [3]; //1 2
  • 默认值的表达式:
    如果默认值是表达式,默认值表达式是惰性求值的
(3) 应用
  • 常见的类数组的解构赋值:
    • arguments
    • NodeList
  • 函数参数的解构赋值
  • 交换变量的值:[x, y] = [y, x];

2. 对象的解构赋值

(1) 原理
  • 模式(结构)匹配 {} = {}
  • 属性名相同的完成赋值
(2) 默认值
  • 默认值的生效条件:
    对象的属性值严格等于(===)undefined 的时候,对应的默认值才会生效const {username='ZhangSan', age=0} = {username:'Jasper'}; //Jasper 0
  • 默认值的表达式:
    如果默认值是表达式,默认值表达式是惰性求值的
(3) 注意事项
  • 如果将一个已经声明的变量用于对象的解构赋值,整个赋值需在圆括号中进行
    let x=2; ({x} = {x:1});
  • 对象的解构赋值可以取到继承的属性或方法
(4) 应用
  • 函数参数的解构赋值
  • 复杂的嵌套的解构赋值

3. 其他数据类型的解构赋值

(1) 字符串的解构赋值
  • 字符串既可以按数组形式来解构赋值,也可以按对象形式来解构赋值
  • 数组形式:const [a,b] = 'hello'; //h e
  • 对象形式:const {0:a, 1:b, length} = 'hello'; //h e 5
(2) 数值和布尔值的解构赋值
  • 数值和布尔值只能按对象形式来解构赋值
  • 先将等号右边的值转为对象,然后再解构赋值
(3) undefined和null的解构赋值
  • 由于 undefined 和 null 无法转为对象,所以对它们进行解构赋值,都会报错

三、Symbol

举报

相关推荐

0 条评论