Appearance

「面试」ES6

WXL570CN2021/07/28interview面试

「面试」ES6

let

  • ES6新增语法
  • 只在当前代码块有效:{}中
  • 不存在变量提升:在使用let命令声明变量之前使用该变量会报错而不是undefined
  • 暂时性死区:在代码块内,使用let命令声明变量之前,该变量都是不可用的
  • 在相同作用域内,不允许重复申明

const

  • 定义时必须赋值
  • 赋值后常量本身不可更改,其实是不可更改其内存地址

解构赋值

数组

位置一一对应,可以指定默认值

let [a, b, c = 3] = [1, 2];
// a = 1, b = 2, c = 3

对象

通过键名对应,位置随意,可以定义一个变量接收,同样可以指定默认值

let {name, age} = {name:"lisi", age:20}
let {name: myname, age: myage}

对象的解构赋值本质上是赋值给键值对中的值

let {name, age} = {name:"lisi", age:20}
// 实际上是
let {name: name, age: age} = {name:"lisi", age:20}

扩展运算符

深拷贝or浅拷贝?

单层结构视为深拷贝

// 对象
a = {name:123, age:222}
b = {...a}
b.name = '张三'
console.log(a) //  {name:123, age:222}
console.log(b) //  {name: '张三', age:222}
// 数组
a = [1,2,3]
b = [...a]
b[0] = 4
console.log(a) //  [1,2,3]
console.log(b) //  [4,2,3]

多层结构视为浅拷贝

a = {person:{name:'张三'}}
b = {...a}
b.person.name = '李四'
console.log(a) //  {person:{name:'李四'}}
console.log(b) //  {person:{name:'李四'}}
// 数组
a = [{name:'张三'}]
b = [...a]
b[0].name = '李四'
console.log(a) //  [{name:'李四'}]
console.log(b) //  [{name:'李四'}]
Last Updated 2023-04-05 09:26:47