JavaScript三元运算符使用说明

时间:2013-07-15 14:37:14

标签: javascript

我正在使用一个小脚本,使用三元运算符来处理短手'if'语句。代码如下:

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

这基本上说,如果输入被选中,则输入类型为“text”,否则为密码。我觉得这是错误的,我在重复自己。

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

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';

                }
            }

        }

2 个答案:

答案 0 :(得分:6)

简单地做

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

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

答案 1 :(得分:1)

?:使用的三元运算符[condition] ? [code1] : [code2]评估condition,如果评估为true,则返回code1,否则code2。永远不会评估code1code2,只评估其中一个。这就是为什么

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

如果test为null,

将同时工作。

运算符通常用于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)之类的另一个分配中使用它,如果test被评估为true,则将num设置为0;如果将其评估为false,则将其设置为42。