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 window.document的属性、方法和事件小结
Oct 24 Javascript
网站404页面3秒后跳到首页的实例代码
Aug 16 Javascript
node.js中的fs.readSync方法使用说明
Dec 17 Javascript
js实现类似新浪微博首页内容渐显效果的方法
Apr 10 Javascript
Ajax实现不刷新取最新商品
Mar 01 Javascript
echart简介_动力节点Java学院整理
Aug 11 Javascript
200行代码实现blockchain 区块链实例详解
Mar 14 Javascript
JavaScript模板引擎实现原理实例详解
Dec 14 Javascript
关于layui时间回显问题的解决方法
Sep 24 Javascript
微信小程序订阅消息(java后端实现)开发
Jun 01 Javascript
Vue + element 实现多选框组并保存已选id集合的示例代码
Jun 03 Javascript
selenium 反爬虫之跳过淘宝滑块验证功能的实现代码
Aug 27 Javascript
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
html中select语句读取mysql表中内容
2006/10/09 PHP
如何提高MYSQL数据库的查询统计速度 select 索引应用
2007/04/11 PHP
PHP+ajax 无刷新删除数据
2010/02/20 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
2016/03/21 PHP
php中array_slice和array_splice函数解析
2016/10/18 PHP
php中对象引用和复制实例分析
2019/08/14 PHP
把JS与CSS写在同一个文件里的书写方法
2007/06/02 Javascript
jQuery下扩展插件和拓展函数的写法(匿名函数使用的典型例子)
2010/10/20 Javascript
基于jquery自己写tab滑动门(通用版)
2012/10/30 Javascript
js操作checkbox遇到的问题解决
2013/06/29 Javascript
jquery制作多功能轮播图插件
2015/04/02 Javascript
javascript实现随机读取数组的方法
2015/08/03 Javascript
js实现横向伸展开的二级导航菜单代码
2015/08/28 Javascript
轻松实现Bootstrap图片轮播
2020/04/20 Javascript
第六章之辅组类与响应式工具
2016/04/25 Javascript
jQuery实现简单倒计时功能的方法
2016/07/04 Javascript
js实现字符全排列算法的简单方法
2017/05/01 Javascript
AngularJS实现的回到顶部指令功能实例
2017/05/17 Javascript
Vue filters过滤器的使用方法
2017/07/14 Javascript
vue.js 嵌套循环、if判断、动态删除的实例
2018/03/07 Javascript
javascript实现摄像头拍照预览
2019/09/30 Javascript
vue如何使用外部特殊字体的操作
2020/07/30 Javascript
在Python中使用模块的教程
2015/04/27 Python
Python中的单行、多行、中文注释方法
2018/07/19 Python
详解通过API管理或定制开发ECS实例
2018/09/30 Python
如何利用Python分析出微信朋友男女统计图
2019/01/25 Python
python使用Plotly绘图工具绘制柱状图
2019/04/01 Python
django框架自定义模板标签(template tag)操作示例
2019/06/24 Python
实例教程 纯CSS3打造非常炫的加载动画效果
2014/11/05 HTML / CSS
详解HTML5如何使用可选样式表为网站或应用添加黑暗模式
2020/04/07 HTML / CSS
新加坡领先的在线生活方式和杂货购物网站:EAMART
2019/04/02 全球购物
小学生竞选班长演讲稿
2014/04/24 职场文书
2015年母亲节活动总结
2015/02/10 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
幼儿教师远程研修感悟
2015/11/18 职场文书
Docker与K8s关系介绍不会Docker也可以使用K8s
2022/06/25 Servers