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 相关文章推荐
java script编程起步(第三课)
Jan 10 Javascript
utf-8编码引起js输出中文乱码的解决办法
Jun 23 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
Apr 23 Javascript
JS常用函数使用指南
Nov 23 Javascript
超全面的vue.js使用总结
Feb 12 Javascript
教你用十行node.js代码读取docx的文本
Mar 08 Javascript
vue.js声明式渲染和条件与循环基础知识
Jul 31 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
Nov 04 Javascript
详解关于微信setData回调函数中的坑
Feb 18 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
Nov 08 Javascript
javascript 对象 与 prototype 原型用法实例分析
Nov 11 Javascript
vue cli 3.0通用打包配置代码,不分一二级目录
Sep 02 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
PHP.MVC的模板标签系统(三)
2006/09/05 PHP
php5.2.0内存管理改进
2007/01/22 PHP
php 智能404跳转代码,适合换域名没改变目录的网站
2010/06/04 PHP
如何让CI框架支持service层
2014/10/29 PHP
windows7配置Nginx+php+mysql的详细教程
2016/09/04 PHP
js登录弹出层特效
2014/03/07 Javascript
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
轻松创建nodejs服务器(3):代码模块化
2014/12/18 NodeJs
js实现Select头像选择实时预览代码
2015/08/17 Javascript
学习javascript的闭包,原型,和匿名函数之旅
2015/10/18 Javascript
轻松实现javascript图片轮播特效
2016/01/13 Javascript
浅谈jQuery效果函数
2016/09/16 Javascript
node.js中的事件处理机制详解
2016/11/26 Javascript
Vue.js实例方法之生命周期详解
2017/07/03 Javascript
vue环境搭建简单教程
2017/11/07 Javascript
webpack多入口文件页面打包配置详解
2018/01/09 Javascript
vue项目中公用footer组件底部位置的适配问题
2018/05/10 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
vue 左滑删除功能的示例代码
2019/01/28 Javascript
小程序如何使用分包加载的实现方法
2019/05/22 Javascript
使用React代码动态生成栅格布局的方法
2020/05/24 Javascript
antd design table更改某行数据的样式操作
2020/10/31 Javascript
给Python中的MySQLdb模块添加超时功能的教程
2015/05/05 Python
Python中的列表生成式与生成器学习教程
2016/03/13 Python
对Python协程之异步同步的区别详解
2019/02/19 Python
pycharm配置当鼠标悬停时快速提示方法参数
2019/07/31 Python
Python学习笔记之Zip和Enumerate用法实例分析
2019/08/14 Python
python 有效的括号的实现代码示例
2019/11/11 Python
如何基于Python创建目录文件夹
2019/12/31 Python
GDAL 矢量属性数据修改方式(python)
2020/03/10 Python
HTML5移动端开发遇见的东西
2019/10/11 HTML / CSS
重阳节登山活动方案
2014/02/03 职场文书
死亡证明书样本说明
2014/10/18 职场文书
体育部部长竞选稿
2015/11/21 职场文书
基于Nginx实现限制某IP短时间访问次数
2021/03/31 Servers
python3操作redis实现List列表实例
2021/08/04 Python