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)相关推荐

  1. python中关系运算符惰性求值,lazy.js 惰性求值实现分析

    背景:惰性求值? 来看一个 lazy.js 主页提供的示例: var people = getBigArrayOfPeople(); var results = _.chain(people) .pl ...

  2. 例子---JS实现钟表

    哒哒哒~趁着现在还不困,再来说一下用JS实现钟表的方法,这样轻轻松松就可以自己制作一个时钟出来了,而且样式随你喜欢,想想是不是就很开心,我用了杨洋的帅照做的哦~ 先说一下实现思路:很简单,就是获取时间 ...

  3. 例子---JS无缝轮播图

    DuangDuang,今天我们来一起说说JS实现无缝轮播.没错,顾名思义,就是我们脑子中浮现的类似淘宝主页面中间部分的那个滚动图.这个轮播图的使用频率还是很大的,所以还是很有必要好好研究一下的. 哈哈 ...

  4. JavaScript---位运算符单竖杠(|)在JS的使用,与或(||)要作区分

    一.单竖杠后面是0的话,可以当做取整的运算 // 直接取整,不管后面数字是否超过5 // 此时等价于 Math.floor // 此时等价于 ~~数字(~~1.4.~~1.6) console.log ...

  5. 【前端2】js:原始类型,运算符,调试,页面加载,轮播图,Bom(对象,时钟),Dom(全选全不选,省市级联,隔行/触摸换色,表单校验)

    文章目录 1.js两种引入:js最终要引入到html在浏览器中运行 2.js五大原始类型:undefined 3.js的运算符和流程控制:js不支持单&和单|性能低 4.案例_99乘法表:So ...

  6. (4)javascript的运算符以及运算符的优先级

    运算符的使用方法 在javascript的程序中要完成各种各样的运算,是离不开运算符的. 在javascript中,按运算符类型可以分为算术运算符.赋值运算符.比较运算符.逻辑运算符.条件运算符等. ...

  7. 这些 JS 中强大的操作符,总有几个你没听说过

    大家好,我是若川.今天推荐一篇相对简单些的文章. 大家应该都知道了我最近组织了源码共读活动, 有小伙伴表示读源码上瘾,也很有收获.工作0-5年都可以参与.感兴趣可以加我微信 ruochuan12 私信 ...

  8. JS的组成-JS数组方法-JS函数-系统化学习

    JS Day01 什么是js的组成? ECMAScript(es) 其实就是js的规范(规则) DOM 文档对象模型 div span BOM 浏览器对象模型 JS的使用方式 行内样式的书写(不经常使 ...

  9. JavaScript运算符完全攻略(史上最全!)

    文章目录 JavaScript运算符完全攻略 操作数的个数 操作数的类型 运算符的优先级 运算符的结合性 左值.赋值及其副作用 加法运算 减法运算 乘法运算 除法运算 求余运算 取反运算 递增和递减 ...

最新文章

  1. 关于微信手机端IOS系统中input输入框无法输入的问题
  2. linux服务器崩,Linux系统崩溃最快速的解决方法
  3. 20162329 2017-2018-1 《程序设计与数据结构》第九周学习总结
  4. 使用vue的transition完成滑动过渡
  5. Python地信专题 | 基于geopandas玩转地图可视化
  6. Web开发工具包收藏
  7. Python环境搭建及第三方库安装和卸载
  8. android arcgis 绘制圆_arcgis for android 定位 圆
  9. IntelliJ-IDEA-Debug技巧
  10. H3CSE园区-网络访问控制
  11. 平板示波器如何进行探头的补偿和衰减系数设定-Pintech品致
  12. svn 统计代码行数
  13. C#:定义一抽象类Pet(宠物)类,作为基类
  14. ad16中如何改变栅格颜色
  15. Spring,SpringMVC,Mybatis(第二节)
  16. 使用express封装一个简单的http代理服务器以及手动设置Access-Control-Allow-Origin解决跨域问题
  17. ICPC训练联盟2021寒假冬令营(5)(部分题解):
  18. 《沈剑架构师训练营》第5章 - 数据库架构
  19. vscode 状态栏图标异常问题
  20. CESM简单应用:将HadiSST作为海温强迫场进行CESM控制实验 -compset F FC5 FCN

热门文章

  1. 【百度地图循环标记多个点,点击显示对应详情】
  2. 【GAT】如何理解Graph Attention Network(注意力机制)?
  3. 武汉理工大学 计算机学院 李琳,博士学位论文答辩公告-武汉理工大学计算机学院.doc...
  4. 到海马体照相馆,get你的仙女气息吧!
  5. mysql安装配置cmd_mysql安装配置
  6. 2022-2028全球汽车压力传感器行业发展现状调研及投资前景分析报告
  7. 面包师问题--进程同步问题
  8. 百度,互联网的“流氓大亨”?
  9. 外贸软件之冷冻食品进口贸易管理系统
  10. 【无标题】Android10 编译错误