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 写类方式之二
Jul 05 Javascript
js event事件的传递与冒泡处理
Dec 06 Javascript
JS定时关闭窗口的实例
May 22 Javascript
jQuery 1.9使用$.support替代$.browser的使用方法
May 27 Javascript
JavaScript实现将xml转换成html table表格的方法
Apr 17 Javascript
JavaScript File API文件上传预览
Feb 02 Javascript
微信小程序实现皮肤功能(夜间模式)
Jun 18 Javascript
vue.js实现刷新当前页面的方法教程
Jul 05 Javascript
element-ui表格列金额显示两位小数的方法
Aug 24 Javascript
javascript验证form表单数据的案例详解
Mar 25 Javascript
vue跳转同一个组件,参数不同,页面接收值只接收一次的解决方法
Nov 05 Javascript
Vue中实现回车键切换焦点的方法
Feb 19 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中JSON的使用方法
2015/04/30 PHP
php app支付宝回调(异步通知)详解
2018/07/25 PHP
javascript类继承机制的原理分析
2009/09/12 Javascript
javascript提取URL的搜索字符串中的参数(自定义函数实现)
2013/01/22 Javascript
js 时间函数应用加、减、比较、格式转换的示例代码
2013/08/23 Javascript
使用js Math.random()函数生成n到m间的随机数字
2014/10/09 Javascript
javascript文本框内输入文字倒计数的方法
2015/02/24 Javascript
javascript弹出拖动窗口
2015/08/11 Javascript
js实现人民币大写金额形式转换
2016/04/27 Javascript
JavaScript基础教程——入门必看篇
2016/05/20 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
2016/06/30 Javascript
解决bootstrap中使用modal加载kindeditor时弹出层文本框不能输入的问题
2017/06/05 Javascript
利用Ionic2 + angular4实现一个地区选择组件
2017/07/27 Javascript
vuex中使用对象展开运算符的示例
2017/09/25 Javascript
vue父组件向子组件传递多个数据的实例
2018/03/01 Javascript
浅谈vue首屏加载优化
2018/06/28 Javascript
vue 优化CDN加速的方法示例
2018/09/19 Javascript
浅谈VUE防抖与节流的最佳解决方案(函数式组件)
2019/05/22 Javascript
JavaScript简易计算器制作
2020/01/17 Javascript
js实现百度淘宝搜索功能
2020/02/17 Javascript
js里面的变量范围分享
2020/07/18 Javascript
python计算文本文件行数的方法
2015/07/06 Python
Python读写/追加excel文件Demo分享
2018/05/03 Python
python 实现查询Neo4j多节点的多层关系
2019/12/23 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
2020/04/03 Python
亚瑟士美国官网:ASICS美国
2017/02/01 全球购物
印度尼西亚最大的电商平台:Tokopedia(印尼版淘宝)
2017/12/02 全球购物
法国包包和行李箱销售网站:Bagage24.fr
2020/03/24 全球购物
如何清空Session
2015/02/23 面试题
应聘医药销售自荐书范文
2014/02/08 职场文书
会计系毕业求职信
2014/08/07 职场文书
环境建议书
2015/02/04 职场文书
社团个人总结范文
2015/03/05 职场文书
诉讼和解协议书
2016/03/23 职场文书
用Python提取PDF表格的方法
2021/04/11 Python
python spilt()分隔字符串的实现示例
2021/05/21 Python