【问题标题】:strange behavior with ternary operator三元运算符的奇怪行为
【发布时间】:2013-10-29 04:33:41
【问题描述】:

我尝试编写一个函数,将 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 对象:

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

会变成:

authToken=aqsd2&username=test&password=1234

(如意)

有人可以解释一下,为什么会这样?没想到n已经是0的时候n++会变成0。

【问题讨论】:

  • 你使用后增量,n的值将用于比较,然后增量完成。
  • 为了便于阅读,总是放置空格,例如你的表达式应该写成r += (n++ == 0? "": "&") + i + "=" +p[i];
  • 澄清一下,三元的版本相当于if的版本。你得到不同的输出吗?
  • 不,我只是添加了非三元版本,因为我认为有些人可能不知道那个运算符。

标签: javascript logic expression operator-keyword ternary


【解决方案1】:

这是前后增量之间的区别。在这个问题中有解释:++someVariable Vs. someVariable++ in Javascript

【讨论】:

  • 谢谢,我想这就是我想要的。
【解决方案2】:

"variable++" 在计算后递增,"++variable" 在计算前递增。 “--”运算符也是如此。

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

【讨论】:

    猜你喜欢
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    相关资源
    最近更新 更多