1

基于完全错误逻辑的原始问题:O

$(function() {
  var x=0,y=1;
  $("#div_id").find("input:text").each(function (i, input)  {
    $(this).val(""+(i % 2 == 0)?x++:y++);
  });
});  

如果我从值中删除“”+,我会得到这个错误的结果

在此处输入图像描述

而不是我想要的,这是:

在此处输入图像描述

如果我使用道具也一样:

    $(this).prop("value",""+(i % 2 == 0)?x++:y++);

如果我在 ++ 前缀

我在看什么?这是显而易见的事情吗?


更新:我完全错过了这里的船。

这是我要编写的代码,它可以在没有“”的情况下工作

$(function() {
  var x=0,y=1;
  var inputs = $("#div_id").find("input:text");
  var y = Math.ceil(inputs.size()/2);
  inputs.each(function (i, input)  {
    $(this).prop("value",(i % 2 == 0)?++x:++y);
  });
});  
4

2 回答 2

6
"" + (i % 2 == 0) ? x++ : y++

被解释为(参见优先规则

("" + (i % 2 == 0)) ? x++ : y++

and("" + (i % 2 == 0))总是真实的,因为"true""false"都是非空字符串。因此,在您的示例中,您一直在使用x++,而忽略了y++分支。

于 2013-02-08T10:17:57.250 回答
1

+ 运算符的结合性似乎 是从左到右的表达式。如果您删除""+(i % 2 == 0)使条件成为条件运算符的一部分,它将被评估为真或假。但是,如果您包含它,它将不会被评估为布尔值而不是字符串,并且始终为真。

使用字符串,您将永远是真实的

alert("" + false ? "true" : "false");

现场演示

于 2013-02-08T10:17:47.773 回答