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

 更新时间:2016年07月20日 17:02:30   投稿:mrr  
这篇文章主要介绍了JS for循环中i++ 和 ++i的区别介绍的相关资料,需要的朋友可以参考下

平时都是这样写的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的区别介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • 通过大白话理解微信小程序的授权登录

    通过大白话理解微信小程序的授权登录

    很多人会把微信小程序的登录和授权搞混淆,下面这篇文章主要给大家介绍了如何通过大白话理解微信小程序授权登录的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • layui 上传文件_批量导入数据UI的方法

    layui 上传文件_批量导入数据UI的方法

    今天小编就为大家分享一篇layui 上传文件_批量导入数据UI的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • javascript工厂模式和构造函数模式创建对象方法解析

    javascript工厂模式和构造函数模式创建对象方法解析

    本文主要对javascript工厂模式和构造函数模式创建对象方法进行解析,具有一定的参考价值,下面跟着小编一起来看下吧
    2016-12-12
  • javascript中加号(+)操作符的一些神奇作用

    javascript中加号(+)操作符的一些神奇作用

    这篇文章主要介绍了javascript中加号(+)操作符的一些神奇作用,真的很神奇,例如加号可以转换数据类型,可以把日期转成整数等,需要的朋友可以参考下
    2014-06-06
  • JavaScript中使用webuploader实现上传视频功能(demo)

    JavaScript中使用webuploader实现上传视频功能(demo)

    这篇文章主要介绍了webuploader实现上传视频功能,通过本文给大家介绍了上传视频和上传图片的区别讲解,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-04-04
  • JavaScript获取页面中第一个锚定文本的方法

    JavaScript获取页面中第一个锚定文本的方法

    这篇文章主要介绍了JavaScript获取页面中第一个锚定文本的方法,涉及javascript操作document.archors数组的技巧,需要的朋友可以参考下
    2015-04-04
  • Webwork 实现文件上传下载代码详解

    Webwork 实现文件上传下载代码详解

    WebWork 当然也提供了很友好的拦截器来实现对文件的上传,让我们可以专注与业务逻辑的设计和实现,在实现上传和下载时顺便关注了下框架上传下载的实现
    2016-02-02
  • JS数组在内存中的效率问题浅析

    JS数组在内存中的效率问题浅析

    用js有很久了,但都没有深究过js的数组形式,下面这篇文章主要给大家介绍了关于JS数组在内存中的效率问题,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • 去除html代码里面的script正则方法

    去除html代码里面的script正则方法

    下面小编就为大家带来一篇去除html代码里面的script正则方法。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • Js利用Canvas实现图片压缩功能

    Js利用Canvas实现图片压缩功能

    下面小编就为大家带来一篇Js利用Canvas实现图片压缩功能。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09

最新评论