源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-08-20 03:03 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:JS for循环中i++ 和 ++i的区别介绍
平时都是这样写的for循环,
for(var i = 0; i < 20 ; i++){ 
.... 
}
但我看有的人这样写
for (var i = 0; i < 20 ; ++i) {
....
}
[b]这样会对for循环有什么影响?[/b] [b]1.在for里好像没啥区别...[/b] 但是用在赋值的时候, 就有区别了...
var a = 1;
var b = a++;
var c = 1;
var d = ++c;
console.log(b,d); // 1, 2 
a++ 是先应用a, 然后再自加 ++a 是先自加, 然后在应用a [b]2.大概是 C/C++ 时代带来的习惯,传说 ++i 比 i++ 要快,但事实上这两者的性能在js中是差不多的。 [/b] 至于具体细节,规范里面关于自增/自减运算符是这么写的: 对于放在前面的情况——
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++)
最后一栏仅仅是自加,并没有把这个值赋值给谁,所以从这一点来看,++符号放在前面或者是后面都是一样的。 [b]3.事实上没有太大区别。但是如果要追求那一点点效率问题的话,++i确实会效率高一些. [/b] 确实是从c++的std标准库而来,当i是一个std容器的iterator时,i不是一个数字,i++会多产生一个赋值操作,因此++i性能更高。所以c++习惯的人,在i不是数值时,喜欢用++i来节省开销。 以上所述是小编给大家介绍的JS for循环中i++ 和 ++i的区别介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程素材网网站的支持!
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部