0

我正在编写一个小脚本,将三元运算符用于速记“if”语句。代码如下:

self.checked ? psswrd[z].type = 'text' : psswrd[z].type = 'password';

这实质上是说,如果检查输入,则将输入类型设为“文本”,否则将其设为密码。从我重复自己的意义上说,我有一种感觉这是错误的。

理想情况下,我想做这样的事情:

psswrd[z].type ? 'text' : 'password';

但是我怎样才能检查它被检查的“if”部分呢?我是这种三元方法的新手,所以解释会有很长的路要走,谢谢。

如果需要,完整的循环:

for ( var j = 0; j < checkz.length; j++ ) {

            var self = checkz[j];
            self.onchange = function () {
                for ( var z = 0; z < psswrd.length; z++ ) {

                    self.checked ? psswrd[z].type = 'text' : psswrd[z].type = 'password';

                }
            }

        }
4

2 回答 2

6

简单地做

 psswrd[z].type = self.checked ? 'text' : 'password';

这也更具可读性。我建议更一般地避免使用三元运算符来替换if语句,除非代码看起来足够清晰。

于 2013-07-15T14:38:03.050 回答
1

?:使用 like的三元运算符[condition] ? [code1] : [code2]评估 the condition,如果评估为 true ,则返回code1,否则返回code2。两者都不会发生,code1并且code2将被评估,只是其中之一。这就是为什么

var abc = test == null ? "no" : test.something()

无论 test 是否为空,都将起作用。

运算符一般用在像之类的赋值中a = condition ? code1 : code2,则相当于

if (condition)
  a = code1;
else 
  a = code2;

在您的情况下,您将不得不使用

psswrd[z].type = self.checked ? 'text' : 'password';

这相当于

if (self.checked)
  psswrd[z].type = 'text';
else 
  psswrd[z].type = 'password';

一般用途的微小变化condition ? code1 : code2将导致 code1 或 code2 被执行并且返回值将被丢弃。
或者您可以在另一个分配中使用它var num = 17 + (test ? -17 : 25),如果测试评估为真,则将 num 设置为 0,如果评估为假,则设置为 42。

于 2013-07-15T14:47:14.627 回答