• js i++ 与 ++i 的区别


    转载:http://blog.csdn.net/hjb2722404/article/details/50423804

    在javascript中,我们常常搞不懂i++与++i的区别,今天我们就来简单说一下。

    i++的例子:

        var i=1;
        console.log(i); // 输出1
    
        var a=i++;
        console.log(i); //输出2
        console.log(a); //输出1

    ++i的例子:

        var i=1;
        console.log(i);
    
        var a=++i;
        console.log(i); //输出2
        console.log(a); //输出2

    解释

    我们通过两个例子,可以看出其中不同,当使用i++赋值给a后,a的值为1,而使用++i赋值给a后,a的值为2,而两例中i最终都为2

    可见: 
    * 使用i++时,i先将自身的值赋值给变量a,然后再自增1 
    * 使用++i时,i先将自身的值自增1,再将自增后的值赋值给变量a

    原理:

    运算符优先级
    • 我们知道,++作为后置递增时,优先级为16,而作为前置递增时,优先级为15
    • =作为赋值运算符时,优先级为3
    • 所以,++会优先于=而执行
    ++运算符前置与后置的区别

    我们看看MDN上对该运算符的说明:

    If used postfix, with operator after operand (for example, x++), then it returns the value before incrementing. 
    If used prefix with operator before operand (for example, ++x), then it returns the value after incrementing.

    简单翻译:

    如果该运算符作为后置操作符,则返回它递增之前的值; 
    如果该运算符作为前置操作符,则返回它递增之后的值

    所以,我们就知道, ++运算符会返回一个值,如果前置,则返回操作对象递增之后的值,如果后置,则返回操作对象递增之前的值。

    var a = i++时,实际上做了如下操作

        i=1
        j=i; 
        i=i+1;
        a=j;

    var a = ++i时,实际上做了如下操作

        i=1
        j=i+1;
        i=i+1
        a=j;

    拓展

    设i=1,a = (i++)+(i++)+(++i)

    那么a的值是?

    我们可以将该运算简化为:

        var i =1;
    
        b=function(){
    
            var j;
            j=i;
            i=i+1; //2
    
    
            return j; //1
    
        };
    
        c=function(){
    
            var m;
            m=i; //2
            i=i+1; //3
    
            retrun m; //2
    
        };
    
        d=function(){
    
            var n;
            n=i+1; //4
            i=i+1; //4
    
            return n; //4
    
        }
    
        var a = b + c +d;
        a=1+2+4=7;

    所以当i=1,a = (i++)+(i++)+(++i)=1+2+4=7

  • 相关阅读:
    ZooKeeper实践:(1)集群管理
    删除重复数据只保留一条
    查询sqlserver 大小写
    字段按位数自动加空格
    批量更新数据遍历数据
    测试端口号是否开通
    收缩数据库
    插入ID=-1 的数据
    查询重复语句,多表查询
    oracle数据查询时间
  • 原文地址:https://www.cnblogs.com/xianshenglu/p/8059586.html
Copyright © 2020-2023  润新知