带空else的Javascript三元运算符

带空else的Javascript三元运算符,javascript,if-statement,ternary,Javascript,If Statement,Ternary,我试图将下面的if-else转换为javascript中的三元运算符表示,如下所示 var x = 2; if (x === 2) {alert("2");} else { //do nothing} 但当我这么做的时候: (t==2)?(alert("1")):(); Chrome抛出了一个语法错误 我的问题是— 如何在javascript中使用带有空“else”分支的三元运算符,即“:”后面的部分。 另外,这是允许的-使用javascript中的三元运算符执行语句-不执

我试图将下面的if-else转换为javascript中的三元运算符表示,如下所示

var x = 2;
if (x === 2) {alert("2");}
else
         { //do nothing}
但当我这么做的时候:

(t==2)?(alert("1")):();
Chrome抛出了一个语法错误

我的问题是— 如何在javascript中使用带有空“else”分支的三元运算符,即“:”后面的部分。 另外,这是允许的-使用javascript中的三元运算符执行语句-不执行赋值


另外:上面的代码只是一个基本情况。实际上,我试图将页面的所有DOM元素作为一个数组(称为all2),然后仅将这些元素添加到另一个数组(仅当它们具有非空类名时)中。这是我的密码:

all2.forEach(function(e){ e.getAttribute("class") ? (only.push(e.getAttribute("class"))) : (); }); 
如果我将第三个操作数留空,它将抛出语法错误。传递空值可以执行以下操作:

(t==2)?(alert("1")):null;

可以用任何没有副作用的表达式替换null。()不是有效的表达式。

您有几个选项可以在一行中很好地执行此操作:

选项1-noop功能

设置全局noop函数:

function noop(){}
(t==2)?(alert("1")):(noop());
选项2-&&operator

使用&&operater时,仅当previos操作数为true时才计算操作数,因此您可以miply写入:

(t==2) && alert("1");
或者,例如,如果您有一个要推送到的arry,您可以在以下时间之前测试它是否不为空:

arr && arr.push(obj)

在这种情况下,不需要使用三元运算符。三元运算符需要第三个参数

状况?expr1:expr2

洛基

你可以使用


不,不能有空的else,最好不要使用三元运算符,它需要第三个参数。使用简单的if条件

if(t==2) alert("2");

你放了很多无用的括号,js中最好的空值是
undefined

document.getElementById('btn-ok')。onclick=function(){
var val=document.getElementById('txt-val')。值;
val==2?警报(val):未定义;
}


好的
在评论中回答您真正的问题:

all2.forEach(function (e) {
    e.getAttribute("class") && only.push(e.getAttribute("class"));
});

我也不喜欢这样。所以你在正确的轨道上寻找替代品

在这种情况下,我会写:

t===2 && alert("2")
您的想法也是有效的,例如,您可以这样做:

t===2 ? alert("2") : null

但它是四个额外的字符

如果没有其他逻辑分支,为什么要使用三元运算符?三元运算符之所以称为三元运算符,是因为它需要三个操作数来操作。我认为更合适的解决方案是使用JavaScript短路。请看一看我关于JavaScript短路的拙劣帖子@如果你没有其他东西,就不需要使用三元运算符。三元是if-else的简写方法。你不觉得你把事情弄得比你需要的复杂吗?上面的代码只是一个基本情况。实际上,我试图将页面的所有DOM元素作为一个数组(称为all2),然后仅将这些元素添加到另一个数组(仅当它们具有非空类名时)中。这是我的代码:all2.forEach(函数(e){e.getAttribute(“类”)?(仅.push(e.getAttribute(“类”)):();});如果我将第三个操作数留空,它将抛出语法错误。传递一个空工作表实际上我正在尝试做其他事情。上面的例子只是一个基本情况。我想解析一个数组(变量名-all2),并仅当all2的一个元素为非空时才将其推入另一个数组。比较不需要括号
t===2 ? alert("2") : null