繁体   English   中英

Javascript 三元运算符,其他为空

[英]Javascript Ternary operator with empty else

我正在尝试将以下 if-else 转换为它在 javascript 中的三元运算符表示,如下所示

var x = 2;
if (x === 2) {alert("2");}
else
         { //do nothing}

但是当我这样做时:

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

Chrome 抛出语法错误。

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

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

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

如果我将第三个操作数留空,则会引发语法错误。 传递一个空作品

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

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

做这个 :

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

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

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

 document.getElementById('btn-ok').onclick = function(){ var val = document.getElementById('txt-val').value; val == 2 ? alert(val) : undefined; }
 <input id="txt-val" type="number" /> <button type="button" id="btn-ok">Ok</button>

使用单行if语句更好

if(value === 2) alert(value);

你有几个选项可以在一行中很好地做到这一点:

选项 1 - noop 函数

设置一个全局 noop 函数:

function noop(){}
(t==2)?(alert("1")):(noop());

选项 2 - && 运算符

当您使用 && 运算符时,仅当先前的操作数为真时才计算操作数,因此您可以简单地编写:

(t==2) && alert("1");

或者,例如,如果您有一个要推送到的 arry,您可以测试它之前是否为空:

arr && arr.push(obj)

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

健康)状况 ? 表达式 1 : 表达式 2

条件(三元)运算符中的Lokki

您可以使用if 语句

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

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

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

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

在这种情况下,我会写:

t===2 && alert("2")

你的想法也是有效的,例如你可以这样做:

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

但它是四个额外的字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM