场景复现:
mpvue开发小程序中,偶遇一个有趣的场景,全局变量作为计算属性作用在视图中,在函数中let 定义一局部变量A,将A作为对象赋值(key-value),赋值完成后,将A赋值给全局变量,在定义一局部变量B,将A直接赋值给B(B=A),再修改B,发现视图出现了错误的值。
问题描述:
关键代码如下
// 计算属性关联视图
computed:{
userinfo(){
return store.state.userInfo
}
}
// 正常时,视图nickname应该为CrazyA
let innerUserInfo = {}
innerUserInfo['nickName'] = 'CrazyA'
store.state.userInfo = innerUserInfo
let p_userinfo = innerUserInfo
// 但是B变量修改后视图也变了,变成了Syatem
p_userinfo.nickName = 'System'
原因分析:
JavaScript 有七种内置类型,其中:
基本类型
• 空值(null)
• 未定义(undefined)
• 布尔值( boolean)
• 数字(number)
• 字符串(string)
• 符号(symbol,ES6 中新增)
引用类型
• 对象(object)
对于基本类型,赋值(=)是值的拷贝,比较(= = =)的是实际的值,而对于引用类型(Array也是一种Object),赋值(=)是引用地址的拷贝,比较(= = =)的是引用地址: