Javascript else 为空的三元运算符
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 引发语法错误。
我的问题是 -
如何在 javascript 中使用空 "else" 分支的三元运算符 - 即“:”之后的部分。
此外,这是否允许 - 在 javascript 中使用三元运算符来执行语句 - 不进行赋值。
另外:上面的代码只是一个基本案例。我实际上试图将页面的所有 DOM 元素作为一个数组(称为 all2),然后仅当它们具有非空 class 时才将这些元素添加到另一个数组(仅称为)名字。这是我的代码:
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 - && 运算符
当您使用 && 运算符时,仅当前面的操作数为真时才计算操作数,因此您可以简单地写:
(t==2) && alert("1");
或者,例如,如果你有一个你想要推送的数组,你可以在之前测试它是否为空:
arr && arr.push(obj)
在这种情况下,您不需要使用三元运算符。三元运算符需要第三个参数。
condition ? expr1 : expr2
Lokki 在 Conditional (ternary) Operator
您可以使用 if statement
if ( t == 2 ) alert(1);
不,else 不能为空,最好不要使用三元运算符,它需要第三个参数。使用简单的 if 条件。
if(t==2) alert("2");
你放了很多没用的括号,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);
在评论中回答你真正的问题:
all2.forEach(function (e) {
e.getAttribute("class") && only.push(e.getAttribute("class"));
});
我也不喜欢。所以你在寻找替代品的道路上是正确的。
在这种情况下,我会写:
t===2 && alert("2")
你的想法也对,比如你可以这样做:
t===2 ? alert("2") : null
但它是四个额外的字符。
我正在尝试将以下 if-else 转换为其在 javascript 中的三元运算符表示,如下所示
var x = 2;
if (x === 2) {alert("2");}
else
{ //do nothing}
但是当我这样做时:
(t==2)?(alert("1")):();
Chrome 引发语法错误。
我的问题是 - 如何在 javascript 中使用空 "else" 分支的三元运算符 - 即“:”之后的部分。 此外,这是否允许 - 在 javascript 中使用三元运算符来执行语句 - 不进行赋值。
另外:上面的代码只是一个基本案例。我实际上试图将页面的所有 DOM 元素作为一个数组(称为 all2),然后仅当它们具有非空 class 时才将这些元素添加到另一个数组(仅称为)名字。这是我的代码:
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 - && 运算符
当您使用 && 运算符时,仅当前面的操作数为真时才计算操作数,因此您可以简单地写:
(t==2) && alert("1");
或者,例如,如果你有一个你想要推送的数组,你可以在之前测试它是否为空:
arr && arr.push(obj)
在这种情况下,您不需要使用三元运算符。三元运算符需要第三个参数。
condition ? expr1 : expr2
Lokki 在 Conditional (ternary) Operator
您可以使用 if statement
if ( t == 2 ) alert(1);
不,else 不能为空,最好不要使用三元运算符,它需要第三个参数。使用简单的 if 条件。
if(t==2) alert("2");
你放了很多没用的括号,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);
在评论中回答你真正的问题:
all2.forEach(function (e) {
e.getAttribute("class") && only.push(e.getAttribute("class"));
});
我也不喜欢。所以你在寻找替代品的道路上是正确的。
在这种情况下,我会写:
t===2 && alert("2")
你的想法也对,比如你可以这样做:
t===2 ? alert("2") : null
但它是四个额外的字符。