JS for循环中i++ 和 ++i的区别介绍


Posted in Javascript onJuly 20, 2016

平时都是这样写的for循环,

for(var i = 0; i < 20 ; i++){ 
.... 
}

但我看有的人这样写

for (var i = 0; i < 20 ; ++i) {
....
}

这样会对for循环有什么影响?

1.在for里好像没啥区别...

但是用在赋值的时候, 就有区别了...

var a = 1;
var b = a++;
var c = 1;
var d = ++c;
console.log(b,d); // 1, 2

a++ 是先应用a, 然后再自加

++a 是先自加, 然后在应用a

2.大概是 C/C++ 时代带来的习惯,传说 ++i 比 i++ 要快,但事实上这两者的性能在js中是差不多的。

至于具体细节,规范里面关于自增/自减运算符是这么写的:

对于放在前面的情况——

UnaryExpression : ++ UnaryExpression
Let expr be the result of evaluating UnaryExpression.
Let oldValue be ToNumber(GetValue(expr)).
ReturnIfAbrupt(oldValue).
Let newValue be the result of adding the value 1 to oldValue, using the same rules as for the + operator (see 12.7.5).
Let status be PutValue(expr, newValue).
ReturnIfAbrupt(status).
Return newValue.

 大致翻译一下:

1.令expr等于当前表达式(就是++后面的部分)的结果

2.令oldValue等于expr转换为数字的结果

3.使用和“+”运算符一样的规则,令newValue = oldValue + 1

4.将newValue赋值给expr

5.整个运算式返回newValue

对于放在后面的情况——

PostfixExpression : LeftHandSideExpression ++

1.Let lhs be the result of evaluating LeftHandSideExpression.

2.Let oldValue be ToNumber(GetValue(lhs)).

3.ReturnIfAbrupt(oldValue).

4.Let newValue be the result of adding the value 1 to oldValue, using the same rules as for the + operator (see 12.7.5).

5.Let status be PutValue(lhs, newValue).

6.ReturnIfAbrupt(status).

7.Return oldValue.

大致翻译——

1.令lhs等于当前表达式(++前面的部分)的结果

2.令oldValue等于lhs转换为数字的结果

3.使用和“+”运算符一样的规则,令newValue = oldValue + 1

4.将newValue赋值给lhs

5.整个运算式返回oldValue

可以看到,这两者的的区别只是最后一步,整个运算式是返回加一后的还是加一前的。

对于for语句而言:

for(var i = 0; i < n; i++)

最后一栏仅仅是自加,并没有把这个值赋值给谁,所以从这一点来看,++符号放在前面或者是后面都是一样的。

3.事实上没有太大区别。但是如果要追求那一点点效率问题的话,++i确实会效率高一些.

确实是从c++的std标准库而来,当i是一个std容器的iterator时,i不是一个数字,i++会多产生一个赋值操作,因此++i性能更高。所以c++习惯的人,在i不是数值时,喜欢用++i来节省开销。

以上所述是小编给大家介绍的JS for循环中i++ 和 ++i的区别介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
Dec 09 Javascript
js自定义事件及事件交互原理概述(二)
Feb 01 Javascript
jQuery源码解读之removeClass()方法分析
Feb 20 Javascript
JavaScript获取表单enctype属性的方法
Apr 02 Javascript
jquery+CSS3模拟Path2.0动画菜单效果代码
Aug 31 Javascript
javascript匀速动画和缓冲动画详解
Oct 20 Javascript
详解create-react-app 自定义 eslint 配置
Jun 07 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
Aug 17 Javascript
微信小程序自定义键盘 内部虚拟支付
Dec 20 Javascript
Nest.js参数校验和自定义返回数据格式详解
Mar 29 Javascript
vue实现滑动解锁功能
Mar 03 Vue.js
javascript和jQuery实现网页实时聊天的ajax长轮询
Jul 20 #Javascript
Node.js如何自动审核团队的代码
Jul 20 #Javascript
js只执行1次的函数示例
Jul 20 #Javascript
JQuery为元素添加样式的实现方法
Jul 20 #Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
Jul 20 #Javascript
javaScript给元素添加多个class的简单实现
Jul 20 #Javascript
JavaScript中数组的22种方法必学(推荐)
Jul 20 #Javascript
You might like
php判断字符串在另一个字符串位置的方法
2014/02/27 PHP
myFocus slide3D v1.1.0 使用方法与下载
2011/01/12 Javascript
js showModalDialog 弹出对话框的简单实例(子窗体)
2014/01/07 Javascript
javascript中数组的多种定义方法和常用函数简介
2014/05/09 Javascript
JavaScript 常见安全漏洞和自动化检测技术
2015/08/21 Javascript
由简入繁实现Jquery树状结构的方法(推荐)
2016/06/10 Javascript
jQuery EasyUI右键菜单实现关闭标签/选项卡
2016/10/10 Javascript
微信小程序动态显示项目倒计时效果
2017/06/13 Javascript
谈谈VUE种methods watch和compute的区别和联系
2017/08/01 Javascript
分享5个顶级的JavaScript Ajax组件库
2018/09/16 Javascript
JavaScript使用表单元素验证表单的示例代码
2019/08/20 Javascript
vue 项目引入echarts 添加点击事件操作
2020/09/09 Javascript
vue使用transition组件动画效果的实例代码
2021/01/28 Vue.js
[52:02]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第二场 2月26日
2021/03/11 DOTA
Python抓取Discuz!用户名脚本代码
2013/12/30 Python
Python中for循环和while循环的基本使用方法
2015/08/21 Python
Python cx_freeze打包工具处理问题思路及解决办法
2016/02/13 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
2018/01/29 Python
Python实现定时备份mysql数据库并把备份数据库邮件发送
2018/03/08 Python
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
2019/11/19 Python
Python爬虫之爬取淘女郎照片示例详解
2020/07/28 Python
python 装饰器的实际作用有哪些
2020/09/07 Python
详解如何解决canvas图片getImageData,toDataURL跨域问题
2018/09/17 HTML / CSS
MATCHESFASHION.COM法国官网:英国奢侈品零售商
2018/01/04 全球购物
倩碧澳大利亚官网:Clinique澳大利亚
2019/07/22 全球购物
会计实习生工作总结的自我评价
2013/10/07 职场文书
销售文员岗位职责
2013/11/29 职场文书
大学生就业求职信
2014/06/12 职场文书
2014年学校法制宣传日活动总结
2014/11/01 职场文书
2014年资料员工作总结
2014/11/18 职场文书
质量承诺书格式范文
2015/04/28 职场文书
2015年小学美术工作总结
2015/05/25 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers
tensorboard 可视化之localhost:6006不显示的解决方案
2021/05/22 Python
python中如何对多变量连续赋值
2021/06/03 Python
CSS的calc函数用法小结
2022/06/25 HTML / CSS