关闭。这个问题是基于意见的。它目前不接受答案。想改进这个问题?更新问题,以便可以通过编辑这篇文章用事实和引用来回答它。 2年前关闭。改进这个问题
尽管有人认为,单行 if
语句中的大括号对于可维护性和可读性而言并不理想,但已经明确提出。
但是这个呢?
if (lemons) { document.write("foo gave me a bar"); }
它甚至更加压缩,如果扩展,大括号将不会被遗忘。有没有明显的问题,如果没有,有什么考虑?我觉得它仍然非常可读,至少与三元运算符一样多。在我看来,由于可读性,三元运算符的建议并不多,尽管我觉得这个结论并不那么一致。
我心中的邪恶双胞胎想要提出这一点,尽管语法显然不是为此而生的,而且可能只是一个坏主意。
(syntax) ? document.write("My evil twin emerges"): "";
document.write("My evil twin emerges") if lemons
variable = (condition) ? true-value : false-value;
。)祝你好运。
我已经看到用于实现此目的的 &&
运算符的短路行为,尽管不习惯这一点的人可能会觉得很难阅读,甚至称其为反模式:
lemons && document.write("foo gave me a bar");
就个人而言,我经常使用不带括号的单行 if
,如下所示:
if (lemons) document.write("foo gave me a bar");
如果我需要添加更多语句,我会将语句放在下一行并添加括号。由于我的 IDE 进行自动缩进,因此对这种做法的可维护性反对意见没有实际意义。
我这样使用它:
(lemons) ? alert("please give me a lemonade") : alert("then give me a beer");
alert(lemons?"please give me a lemonade":"then give me a beer")
您可以使用 PHP 中常用的这种格式:
(lemon) ? document.write("foo gave me a bar") : document.write("if condition is FALSE");
lemon
上不需要括号。
document.write(lemon ? "foo gave me a bar" : "if condition is FALSE");
:)
如前所述,您可以使用:
&& 风格
lemons && document.write("foo gave me a bar");
或者
无括号样式
if (lemons) document.write("foo gave me a bar");
短路返回
但是,如果您希望使用单行 if
语句来短路函数,则需要使用 bracket-less 版本,如下所示:
if (lemons) return "foo gave me a bar";
作为
lemons && return "foo gave me a bar"; // does not work!
会给你一个SyntaxError: Unexpected keyword 'return'
lemons
(如果它是假的)的情况——您只想在 lemons
为真时返回“foo give me bar”。
可以用这个,
lemons ? alert("please give me a lemonade") : alert("then give me a beer");
解释:如果 lemons
为真,则 alert("please give me a lemonade")
,否则,alert("then give me a beer")
lemons? alert("please give me a fancy beer with a lemon wedge in it"): alert(please give me a beer")
FTY
alert(lemons ? "please give me a lemonade": "then give me a beer");
这一行要干净得多。
if(dog) alert('bark bark');
我更喜欢这个。希望它可以帮助某人
正如很多人所说,如果您正在寻找实际的 1 行,那么:
if (Boolean_expression) do.something();
是首选。然而,如果你想做一个 if/else 那么三元是你的朋友(而且也很酷):
(Boolean_expression) ? do.somethingForTrue() : do.somethingForFalse();
还:
var something = (Boolean_expression) ? trueValueHardware : falseATRON;
但是,我看到了一个非常酷的例子。向@Peter-Oslson 大喊 &&
(Boolean_expression) && do.something();
最后,它不是 if 语句,而是使用 map/reduce 或 Promise.resolve() 在循环中执行事情也很有趣。向@brunettdan 大喊
// 另一个简单的例子
var a = 11;
a == 10 ? alert("true") : alert("false");
var a = 11; alert(a === 10);
?
alert(a === 10 ? "true" : "false")
alert(a===10)
。
我已经看到很多答案,很多人赞成使用三元运算符。如果 a) 你确实有一个替代选项,并且 b) 你从一个简单的条件返回一个相当简单的值,那么三元组很棒。但...
最初的问题没有替代方案,只有一个(真实)分支的三元运算符迫使您返回一个完善的答案。
lemons ? "foo gave me a bar" : "who knows what you'll get back"
我认为最常见的变体是 lemons ? 'foo...' : ''
,并且,正如您通过阅读关于 true、false、truthy、falsey、null、nil、blank、empty(我们没有?)的任何语言的无数文章所知道的那样,你正在进入一个雷区(尽管是一个有据可查的雷区。)
一旦三元的任何部分变得复杂,您最好使用更明确的条件形式。
说我投票给if (lemons) "foo"
还有很长的路要走。
(i === 0 ? "true" : "false")
使用 if
块时,也可以使用单行来完成,如下所示:
if (blah)
doThis();
它也适用于 while
循环。
箭头函数示例:
let somethingTrue = true
[1,2,3,4,5].map(i=>somethingTrue && i*2)
在承诺中:
Promise.resolve()
.then(_=>checkTrueFalse && asyncFunc())
.then(_=>{ .. })
否则:
if(somethingTrue) thenDo()
如果它只是一个简单的条件,我更喜欢尽可能使用 if(value) ,因为语句开头的 if 一词比括号和问号更能说明正在发生的事情。
**Old Method:**
if(x){
add(x);
}
New Method:
x && add(x);
即使分配操作我们也可以用圆括号来做
exp.includes('regexp_replace') && (exp = exp.replace(/,/g, '@&'));
不定期副业成功案例分享