三元运算符的奇怪行为

时间:2013-10-20 19:20:10

标签: javascript logic expression operator-keyword ternary

我尝试编写一个函数,将javascript对象转换为与http兼容的字符串。我实现了我的目标,但我不知道它为什么会起作用。 我的最终功能是:

function paramify (p) {
    var n = 0, r = "";
    for (var i in p) {
        r+=(n++==0?"":"&")+i+"="+p[i];
    }
    return r;
}

没有三元运算符的版本是:

function paramify (p) {
    var n=0, r="";
    for(var i in p){
        if(n++!=0){
            r+="&"
        }
        r+=i+"="+p[i]
    }
    return r;
}

示例json-object:

{"authToken":"aqsd2","username":"test","password":"1234"}

将成为:

authToken=aqsd2&username=test&password=1234

(as intendet)

可能有人解释我,为什么会这样?当n已经为0时,我没想到n ++会变成0。

2 个答案:

答案 0 :(得分:3)

这是前后增量之间的差异。这个问题解释了这个问题:++someVariable Vs. someVariable++ in Javascript

答案 1 :(得分:3)

“变量++”在评估后递增,“++变量”在评估之前递增。 “ - ”运算符也是如此。

http://msdn.microsoft.com/en-us/library/ie/26k41698(v=vs.94).aspx

的参考资料