我正在使用一个小脚本,使用三元运算符来处理短手'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';
}
}
}
答案 0 :(得分:6)
简单地做
psswrd[z].type = self.checked ? 'text' : 'password';
这也更具可读性。我建议更一般地避免使用三元运算符替换if
语句,除非代码看起来足够清楚。
答案 1 :(得分:1)
?:
使用的三元运算符[condition] ? [code1] : [code2]
评估condition
,如果评估为true,则返回code1
,否则code2
。永远不会评估code1
和code2
,只评估其中一个。这就是为什么
var abc = test == null ? "no" : test.something()
将同时工作。
运算符通常用于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。