运算符副作用总结与例子(js)
js中运算符副作用总结与例子
js中赋值运算符,递增递减运算符,delete运算符具有副作用,简单地说就是前后表达式的值会相互影响,除此之外其它的js运算符都没有副作用。
但函数表达式和对象创建表达式有些特别,在函数体或者构造函数内部使用了这些运算符产生了副作用的时候,我们说函数调用表达式和构造函数是有副作用的。
一个例子:
c = (a++) + a;
这条语句中含有三个子表达式,我们用三个符号来表示,即
exp1 | c |
---|---|
exp2 | a++ |
exp3 | a |
我们知道在js总是严格按照从左到右的顺序计算子表达式,即先计算exp1再计算exp2,再计算exp3.
计算子表达式的结果如下
exp1 | undefined |
---|---|
exp2 | 1 (因为a++是先是先使用后自加,故exp2=1,然后a加1变为2,此时a指向的内存空间的内容变为2,也就是a变为了2,下一个表达式的a为2) |
exp3 | 2 |
然后再根据js运算规则,最终计算出c=1+2=3
另外一个例子:
一般来说,a += b;和a = a + b;是等价的,但是当a包含副作用表达式的时候,两者就不等价了
例如:
i = 1;
var data = [0,1,2];
data[i++] += 2;
执行一次计算结果:
data[0] | 0 |
---|---|
data[1] | 3 |
data[2] | 2 |
i = 1;
var data = [0,1,2];
data[i++] = data[i++] 2;
执行一次计算结果:
data[0] | 0 |
---|---|
data[1] | 4 |
data[2] | 2 |
原因就在于第二个程序中有三个子表达式,第二个 data[i++]
实际上式 data[2]
,故data[1]=data[2]+2=4
。
运算符副作用总结与例子(js)相关推荐
- python中关系运算符惰性求值,lazy.js 惰性求值实现分析
背景:惰性求值? 来看一个 lazy.js 主页提供的示例: var people = getBigArrayOfPeople(); var results = _.chain(people) .pl ...
- 例子---JS实现钟表
哒哒哒~趁着现在还不困,再来说一下用JS实现钟表的方法,这样轻轻松松就可以自己制作一个时钟出来了,而且样式随你喜欢,想想是不是就很开心,我用了杨洋的帅照做的哦~ 先说一下实现思路:很简单,就是获取时间 ...
- 例子---JS无缝轮播图
DuangDuang,今天我们来一起说说JS实现无缝轮播.没错,顾名思义,就是我们脑子中浮现的类似淘宝主页面中间部分的那个滚动图.这个轮播图的使用频率还是很大的,所以还是很有必要好好研究一下的. 哈哈 ...
- JavaScript---位运算符单竖杠(|)在JS的使用,与或(||)要作区分
一.单竖杠后面是0的话,可以当做取整的运算 // 直接取整,不管后面数字是否超过5 // 此时等价于 Math.floor // 此时等价于 ~~数字(~~1.4.~~1.6) console.log ...
- 【前端2】js:原始类型,运算符,调试,页面加载,轮播图,Bom(对象,时钟),Dom(全选全不选,省市级联,隔行/触摸换色,表单校验)
文章目录 1.js两种引入:js最终要引入到html在浏览器中运行 2.js五大原始类型:undefined 3.js的运算符和流程控制:js不支持单&和单|性能低 4.案例_99乘法表:So ...
- (4)javascript的运算符以及运算符的优先级
运算符的使用方法 在javascript的程序中要完成各种各样的运算,是离不开运算符的. 在javascript中,按运算符类型可以分为算术运算符.赋值运算符.比较运算符.逻辑运算符.条件运算符等. ...
- 这些 JS 中强大的操作符,总有几个你没听说过
大家好,我是若川.今天推荐一篇相对简单些的文章. 大家应该都知道了我最近组织了源码共读活动, 有小伙伴表示读源码上瘾,也很有收获.工作0-5年都可以参与.感兴趣可以加我微信 ruochuan12 私信 ...
- JS的组成-JS数组方法-JS函数-系统化学习
JS Day01 什么是js的组成? ECMAScript(es) 其实就是js的规范(规则) DOM 文档对象模型 div span BOM 浏览器对象模型 JS的使用方式 行内样式的书写(不经常使 ...
- JavaScript运算符完全攻略(史上最全!)
文章目录 JavaScript运算符完全攻略 操作数的个数 操作数的类型 运算符的优先级 运算符的结合性 左值.赋值及其副作用 加法运算 减法运算 乘法运算 除法运算 求余运算 取反运算 递增和递减 ...
最新文章
- 关于微信手机端IOS系统中input输入框无法输入的问题
- linux服务器崩,Linux系统崩溃最快速的解决方法
- 20162329 2017-2018-1 《程序设计与数据结构》第九周学习总结
- 使用vue的transition完成滑动过渡
- Python地信专题 | 基于geopandas玩转地图可视化
- Web开发工具包收藏
- Python环境搭建及第三方库安装和卸载
- android arcgis 绘制圆_arcgis for android 定位 圆
- IntelliJ-IDEA-Debug技巧
- H3CSE园区-网络访问控制
- 平板示波器如何进行探头的补偿和衰减系数设定-Pintech品致
- svn 统计代码行数
- C#:定义一抽象类Pet(宠物)类,作为基类
- ad16中如何改变栅格颜色
- Spring,SpringMVC,Mybatis(第二节)
- 使用express封装一个简单的http代理服务器以及手动设置Access-Control-Allow-Origin解决跨域问题
- ICPC训练联盟2021寒假冬令营(5)(部分题解):
- 《沈剑架构师训练营》第5章 - 数据库架构
- vscode 状态栏图标异常问题
- CESM简单应用:将HadiSST作为海温强迫场进行CESM控制实验 -compset F FC5 FCN
热门文章
- 【百度地图循环标记多个点,点击显示对应详情】
- 【GAT】如何理解Graph Attention Network(注意力机制)?
- 武汉理工大学 计算机学院 李琳,博士学位论文答辩公告-武汉理工大学计算机学院.doc...
- 到海马体照相馆,get你的仙女气息吧!
- mysql安装配置cmd_mysql安装配置
- 2022-2028全球汽车压力传感器行业发展现状调研及投资前景分析报告
- 面包师问题--进程同步问题
- 百度,互联网的“流氓大亨”?
- 外贸软件之冷冻食品进口贸易管理系统
- 【无标题】Android10 编译错误