JS中对象和属性的连续赋值


字数:257 阅读时长:1分钟 阅读:85

前端面试中的疑难杂症——JS 中对象和属性的连续赋值问题。

JavaScript

一、经典面试题

1
2
3
4
5
6
let a = {n:1}
let b = a
a.x = a = {n:2}

console.log(a.x)
console.log(b.x)

二、关键考点

  1. 值类型 vs 引用类型
1
2
3
4
5
6
7
// 值类型,赋值后相互独立
let a = 100
let b = a

// 引用类型,赋值后指向堆中的引用
let c = {n:1}
let d = c
  1. 连续赋值,倒序执行
1
2
3
4
5
6
let a1, a2
a1 = a2 = 10

// 相当于
a2 = 10
a1 = a2
  1. a.x赋值(=) 的优先级高

值类型赋值:

1
2
3
4
5
6
let a = {}
a.x = 100

// 拆解为
// 1. a.x = undefined // 初始化 a.x 属性
// 2. a.x = 100 // 为 x 属性赋值

引用类型赋值:

1
2
3
4
5
6
7
8
9
let a = {n:1}
let b = a
a.x = a = {n:2}

// a.x = a = {n:2} 拆解为
// 1. a = b = {n:1, x: undefined}
// 2. a = {n:2}
// 3. a.x = {n:2}
// 4. b = {n:1, x: {n:2}}

堆栈示例图

三、输出

1
2
console.log(a.x) // undefined
console.log(b.x) // {n:2}

欢迎访问:天问博客

本文作者: Tiven
发布时间: 2022-12-07
最后更新: 2024-01-12
本文标题: JS中对象和属性的连续赋值
本文链接: https://www.tiven.cn/p/4f221238/
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!
欢迎留言,提问 ^_^
个人邮箱: tw.email@qq.com
notification icon
博客有更新,将会发送通知给您!