JavaScript中的赋值运算符 =
赋值运算的细节
赋值运算可以分为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中的赋值运算符 =相关推荐
- JavaScript中赋值运算符的使用
JavaScript中的赋值运算可以分为简单赋值运算和复合赋值运算.简单赋值运算是将赋值运算符(=)右边表达式的值保存到左边的变量中:而复合赋值运算混合了其他操作(例如算术运算操作)和赋值操作.例如: ...
- JavaScript 中的对象拷贝(深拷贝、浅拷贝)
对象是 JavaScript 的基本块.对象是属性的集合,属性是键值对.JavaScript 中的几乎所有对象都是位于原型链顶部 Object 的实例. 介绍 如你所知,赋值运算符不会创建一个对象的副 ...
- javascript 符号_理解JavaScript中“ =”符号的直观指南
javascript 符号 by Kevin Kononenko 凯文·科诺年科(Kevin Kononenko) 理解JavaScript中" ="符号的直观指南 (A Visu ...
- JavaScript中的运算符和语句
一.JavaScript的运算符 a.基本的算术运算符(+.-.*./.%) -.*./.%运算符会在必要的时候将操作数转换为数字,无法转换成数字的操作数将会转换成NaN,相应的运算结果也是NaN. ...
- JavaScript中的逗号运算符
JavaScript逗号运算符 阅读本文的前提,明确表达式.短语.运算符.运算数这几个概念. 所谓表达式,就是一个JavaScript的"短语",JavaScript解释器可以计 ...
- [译]JavaScript中的属性:定义和赋值的区别
原文:http://www.2ality.com/2012/08/property-definition-assignment.html 你知道吗?定义一个属性和为一个属性赋值是有区别的.本文解释了两 ...
- JavaScript中的“ new”关键字是什么?
最初遇到JavaScript时, new关键字可能会造成很大的混乱,因为人们倾向于认为JavaScript并非面向对象的编程语言. 它是什么? 它解决什么问题? 什么时候合适,什么时候不合适? #1楼 ...
- 在JavaScript中定义枚举的首选语法是什么? [关闭]
在JavaScript中定义枚举的首选语法是什么? 就像是: my.namespace.ColorEnum = {RED : 0,GREEN : 1,BLUE : 2 }// later onif(c ...
- JS/JavaScript中两个等号 == 和 三个等号 === 的区别
JavaScript中两个等号 == 和 三个等号 === 的区别 一.概念 == 和 === (1) "=="叫做相等运算符,"==="叫做严格运算符. ...
最新文章
- ORA-01502: index ‘index_name' or partition of such index is in unusable state
- Apache24 + wsgi + Flask on Python3.8部署实践
- JDK5--Annotation学习:基础(二)
- OkHttp 3.x 源码解析之Interceptor 拦截器
- AOP之proceedingjoinpoint和joinpoint区别(获取各对象备忘)、动态代理机制及获取原理代理对象、获取Mybatis Mapper接口原始对象...
- 网关转发其他微服务后头信息拿不到_微服务之基于Zuul自研服务网关
- .Net 并发写入文件的多种方式
- 树莓派HDMI分辨率的设置
- AI 人工智能学习之微积分
- ContextCapture、EPS、CASS3D房地一体详细操作流程
- 《历史是个什么玩意儿》袁腾飞最新语录
- 伟大的UHD编解码器的辩论:谷歌VP9与HEVC / H.265
- 文本深度表示模型——word2vecdoc2vec词向量模型(转)
- 微软官方安装U盘启动盘制作方法教程
- border-radius(使用详解)
- 计算机网络之因特网概述
- 计算机u盘驱动坏了如何的修复,U盘识别不了,小编教你U盘识别不了怎么修复
- 南京大学计算机科学与技术专业博士,南京大学2017年计算机科学与技术系博士招生目录...
- 山西大同大学技术会,大同大学的家!
- 使用cmake安装nuget
热门文章
- MAC OSX使用(二)——MAC OSX快捷键
- vue.runtime.esm.js?2b0e:619 [Vue warn]: Error in created hook: TypeError: Object(...) is not a func
- TensorFlow 安装 Win10 Python+GPU
- 百度信息流流量入驻规范
- html打印样式不生效,css – 打印样式:如何确保图像不跨越分页符
- 出现SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“.的解决方法
- 真正移动支付切入口:手机在线购物
- ytu一c语言实验一保留整数
- Elasticsearch 分布式搜索引擎 -- 数据同步:数据同步思路分析 实现elasticsearch与数据库数据同步
- 好用的手机高效日程管理软件,拯救拖延症