赋值运算的细节

赋值运算可以分为4个步骤

假设:a = 1;

1.找到变量a的内存地址,准备赋值

2.运算右侧代码(不管是表达式,变量,字面量1这些都可),得到要赋值的数据

这里:a = 1,右侧是一个字面量1,得到要赋值的数据1

3.将右侧运算的数据放入到之前的地址中

4.返回整个表达式的结果为右侧运算的数据

所以返回 表达式的结果为1

//第4步含义举例:
var a;
console.log(a = 1); //这里表示的是:输出表达式a = 1的返回值1,凑巧该值与a的值一样

eg:一道比较有意思的题

var a = { n:1 };
var b = a;
a.x = a = { n:2 };
console.log(a.x);
console.log(b.x);

分析:var a = { n:1 }; 表示的是变量a指向一个对象{ n:1 }的地址 ,var b = a;b也指向a所指向对象

{ n:1 }的地址

重点是:a.x = a = {n:2}的理解,可以看作 a.x = a = {n:2} 类似于:a = 1;

第1步:找到变量a.x的内存地址,准备赋值 (a.x是给对象a创建一个成员x的意思)

第2步运算右侧代码( a = {n:2}),得到要赋值的数据

这里是让a 指向一个新的对象{n:2}的地址

第3步 :将右侧运算的数据放入到之前的地址中

这里是将 a = {n:2}的地址放入第一步a.x所指向的内存空间中

第4步:返回整个表达式的结果为右侧运算的数据

最终结果为:

所以可以得出:新的a所指向对象 {n:2}并没有x这个成员

所以console.log(a.x);  结果为 undefined

所以console.log(b.x);  结果为 {n:2}

JavaScript中的赋值运算符 =相关推荐

  1. JavaScript中赋值运算符的使用

    JavaScript中的赋值运算可以分为简单赋值运算和复合赋值运算.简单赋值运算是将赋值运算符(=)右边表达式的值保存到左边的变量中:而复合赋值运算混合了其他操作(例如算术运算操作)和赋值操作.例如: ...

  2. JavaScript 中的对象拷贝(深拷贝、浅拷贝)

    对象是 JavaScript 的基本块.对象是属性的集合,属性是键值对.JavaScript 中的几乎所有对象都是位于原型链顶部 Object 的实例. 介绍 如你所知,赋值运算符不会创建一个对象的副 ...

  3. javascript 符号_理解JavaScript中“ =”符号的直观指南

    javascript 符号 by Kevin Kononenko 凯文·科诺年科(Kevin Kononenko) 理解JavaScript中" ="符号的直观指南 (A Visu ...

  4. JavaScript中的运算符和语句

    一.JavaScript的运算符 a.基本的算术运算符(+.-.*./.%) -.*./.%运算符会在必要的时候将操作数转换为数字,无法转换成数字的操作数将会转换成NaN,相应的运算结果也是NaN. ...

  5. JavaScript中的逗号运算符

    JavaScript逗号运算符  阅读本文的前提,明确表达式.短语.运算符.运算数这几个概念. 所谓表达式,就是一个JavaScript的"短语",JavaScript解释器可以计 ...

  6. [译]JavaScript中的属性:定义和赋值的区别

    原文:http://www.2ality.com/2012/08/property-definition-assignment.html 你知道吗?定义一个属性和为一个属性赋值是有区别的.本文解释了两 ...

  7. JavaScript中的“ new”关键字是什么?

    最初遇到JavaScript时, new关键字可能会造成很大的混乱,因为人们倾向于认为JavaScript并非面向对象的编程语言. 它是什么? 它解决什么问题? 什么时候合适,什么时候不合适? #1楼 ...

  8. 在JavaScript中定义枚举的首选语法是什么? [关闭]

    在JavaScript中定义枚举的首选语法是什么? 就像是: my.namespace.ColorEnum = {RED : 0,GREEN : 1,BLUE : 2 }// later onif(c ...

  9. JS/JavaScript中两个等号 == 和 三个等号 === 的区别

    JavaScript中两个等号 == 和 三个等号 === 的区别 一.概念 == 和 ===  (1)  "=="叫做相等运算符,"==="叫做严格运算符. ...

最新文章

  1. ORA-01502: index ‘index_name' or partition of such index is in unusable state
  2. Apache24 + wsgi + Flask on Python3.8部署实践
  3. JDK5--Annotation学习:基础(二)
  4. OkHttp 3.x 源码解析之Interceptor 拦截器
  5. AOP之proceedingjoinpoint和joinpoint区别(获取各对象备忘)、动态代理机制及获取原理代理对象、获取Mybatis Mapper接口原始对象...
  6. 网关转发其他微服务后头信息拿不到_微服务之基于Zuul自研服务网关
  7. .Net 并发写入文件的多种方式
  8. 树莓派HDMI分辨率的设置
  9. AI 人工智能学习之微积分
  10. ContextCapture、EPS、CASS3D房地一体详细操作流程
  11. 《历史是个什么玩意儿》袁腾飞最新语录
  12. 伟大的UHD编解码器的辩论:谷歌VP9与HEVC / H.265
  13. 文本深度表示模型——word2vecdoc2vec词向量模型(转)
  14. 微软官方安装U盘启动盘制作方法教程
  15. border-radius(使用详解)
  16. 计算机网络之因特网概述
  17. 计算机u盘驱动坏了如何的修复,U盘识别不了,小编教你U盘识别不了怎么修复
  18. 南京大学计算机科学与技术专业博士,南京大学2017年计算机科学与技术系博士招生目录...
  19. 山西大同大学技术会,大同大学的家!
  20. 使用cmake安装nuget

热门文章

  1. MAC OSX使用(二)——MAC OSX快捷键
  2. vue.runtime.esm.js?2b0e:619 [Vue warn]: Error in created hook: TypeError: Object(...) is not a func
  3. TensorFlow 安装 Win10 Python+GPU
  4. 百度信息流流量入驻规范
  5. html打印样式不生效,css – 打印样式:如何确保图像不跨越分页符
  6. 出现SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“.的解决方法
  7. 真正移动支付切入口:手机在线购物
  8. ytu一c语言实验一保留整数
  9. Elasticsearch 分布式搜索引擎 -- 数据同步:数据同步思路分析 实现elasticsearch与数据库数据同步
  10. 好用的手机高效日程管理软件,拯救拖延症