首页 新闻 会员 周边

求解一个js的三元运算符。实在看不懂

0
悬赏园豆:15 [已解决问题] 解决于 2012-01-27 11:19

如下:
b[3].call(g, j, j.val()) ? "error" == k ? (j.data("vali", 1), c.effects(j, "OK", "correct")) : "empty" == k && (j.data("vali", 1),"" == j.val() ? c.effects(j, "", "empty") : c.effects(j, "OK", "correct")) : (j.data("vali", 0), c.effects(j, e, k))

麻烦用 if 的格式表达。实在看不懂

js
小徐的博客的主页 小徐的博客 | 初学一级 | 园豆:15
提问于:2012-01-25 02:22
< >
分享
最佳答案
0

语法上可以简化为:a==b ? c==d ? "1" : e==f && (g==h ? "2" : "3" ) : "4"

执行可知,当a==b时,返回false,证明这个语句故意做了混淆,或者根本就是有BUG

而实际上:(j.data("vali", 1), c.effects(j, "OK", "correct")) ,这个东西应该是执行不了的,你这个没报语法错误?

收获园豆:15
丁学 | 专家六级 |园豆:18730 | 2012-01-25 22:58

执行很好,没有报语法错误。(j.data("vali", 1), c.effects(j, "OK", "correct"))   js中逗号表示一条语句,是可以执行的。 我不确定,所以希望高手帮忙解答一下

小徐的博客 | 园豆:15 (初学一级) | 2012-01-26 14:31

@小徐的博客: 

抱歉,上面看错了,这是新的简化后的结果:

a=="a" ? b=="b" ? (alert(1),alert(2)) : c=="c" && (alert(3) ,d=="d" ? alert(4) : alert(5)) : (alert(6),alert(7))

展开后的结果为:

if(a=="a"){
if(b=="b"){
alert(1);
alert(2);
}
else{
if(c=="c"){
alert(3);
if(d=="d")
alert(4);
else
alert(5);
}
}
}
else{
alert(6);
alert(7);
}

测试了a/b/c/d的各种组合(共16种),结果均表明展开式与原式结果一致

代入原来的表达式,最终结果为:

if(b[3].call(g, j, j.val())){
if("error" == k){
j.data("vali", 1);
c.effects(j, "OK", "correct");
}
else{
if("empty" == k){
j.data("vali", 1);
if("" == j.val())
c.effects(j, "", "empty");
else
c.effects(j, "OK", "correct");
}
}
}
else{
j.data("vali", 0);
c.effects(j, e, k);
}

附测试结果:

0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
67 67 67 67 67 67 67 67 35 34 12 12 12 12

第一行每组四位依次代表一组abcd,0表示不能使下面的等式成立,1表示可以成立,第二行为对应alert出来的数字

丁学 | 园豆:18730 (专家六级) | 2012-01-26 17:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册