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中 声明时用&quot;var&quot;与不用&quot;var&quot;的区别
Apr 15 Javascript
jQuery的图片滑块焦点图插件整理推荐
Dec 07 Javascript
JavaScript图片轮播代码分享
Jul 31 Javascript
使用递归遍历对象获得value值的实现方法
Jun 14 Javascript
jQuery实现简易的输入框字数计数功能示例
Jan 16 Javascript
Javascript基础回顾之(二) js作用域
Jan 31 Javascript
通过命令行创建vue项目的方法
Jul 20 Javascript
基于JQuery的Ajax方法使用详解
Aug 16 jQuery
VUE 全局变量的几种实现方式
Aug 22 Javascript
用vue-cli开发vue时的代理设置方法
Sep 20 Javascript
vue-router 路由传参用法实例分析
Mar 06 Javascript
vue 数据操作相关总结
Dec 17 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
discuz的php防止sql注入函数
2011/01/17 PHP
php Rename 更改文件、文件夹名称
2011/05/24 PHP
PHP 500报错的快速解决方法
2016/12/14 PHP
图片上传判断及预览脚本的效果实例
2013/08/07 Javascript
JS调用页面表格导出excel示例代码
2014/03/18 Javascript
jquery实现简单的全选和反选功能
2016/01/02 Javascript
AngularJS初始化静态模板详解
2016/01/14 Javascript
AngularJS实现textarea记录只能输入规定数量的字符并显示
2016/04/26 Javascript
Vue.js每天必学之构造器与生命周期
2016/09/05 Javascript
JS实现字符串转驼峰格式的方法
2016/12/16 Javascript
node.js利用redis数据库缓存数据的方法
2017/03/01 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
Javascript实现信息滚动效果
2017/05/18 Javascript
详解Vue 开发模式下跨域问题
2017/06/06 Javascript
Axios学习笔记之使用方法教程
2017/07/21 Javascript
基于layui数据表格以及传数据的方式
2018/08/19 Javascript
详细分析vue表单数据的绑定
2020/07/20 Javascript
[01:22:10]Ti4 循环赛第二日 DK vs Empire
2014/07/11 DOTA
python+mysql实现简单的web程序
2014/09/11 Python
Python用GET方法上传文件
2015/03/10 Python
插入排序_Python与PHP的实现版(推荐)
2017/05/11 Python
Python快速查找list中相同部分的方法
2018/06/27 Python
对python添加模块路径的三种方法总结
2018/10/16 Python
python被修饰的函数消失问题解决(基于wraps函数)
2019/11/04 Python
tensorflow实现将ckpt转pb文件的方法
2020/04/22 Python
Python 代码调试技巧示例代码
2020/08/11 Python
Staples加拿大官方网站:办公用品一站式采购
2016/09/25 全球购物
be2台湾单身男女交友:全球网路婚姻介绍的领导品牌
2019/10/11 全球购物
见习期自我鉴定
2013/11/07 职场文书
村干部培训方案
2014/05/02 职场文书
离婚协议书范本(2014版)
2014/09/28 职场文书
安全事故隐患排查治理制度
2015/08/05 职场文书
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
2021/06/11 Python
电脑无法安装Windows 11怎么办?无法安装Win11的解决方法
2021/11/21 数码科技
java代码实现空间切割
2022/01/18 Java/Android
分享7个 Python 实战项目练习
2022/03/03 Python