【发布时间】: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