js连等赋值
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>js连等赋值</title>
<style type="text/css">
</style>
</head>
<body>
<script type="text/javascript">
var a = {n: 1}
var b = a;
a.x = a = {n: 2}
console.log(a.x); //undefined
console.log(b.x); //{n: 2}
</script>
</body>
</html>
赋值前:
赋值后:
a.x = a = {n: 2}
.运算符优先于=赋值运算,先创建
a.x是一个地址,a也是一个地址,a.x创建后,也就有了b.x,它们是同一个地址
js赋值是右结合的,从右边开始向左边赋值,先将{n:2}赋值给地址a,再将{n:2}赋值给地址a.x(其实也是b.x,它们是同一个地址)
另一个解释:
解析器在接受到 a.x = a = {n: 2} 这样的语句后,会这样做:
1.找到 a.x 和 a 的指针。如果已有指针,那么不改变它。如果没有指针,即那个变量还没被申明,那么就创建它,指向 null。
2.a 是有指针的,指向 {n:1};a.x 是没有指针的,所以创建它,指向 null。
然后把上面两个指针,都指向最右侧赋的那个值,即 {n:2}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)