JavaScript 单行 'if' 语句 - 最佳语法,这个替代方案
JavaScript single line 'if' statement - best syntax, this alternative?
意见不多,但已经明确指出,在单行语句if
放弃大括号对于可维护性和可读性来说并不理想。
但是这个呢?
if (lemons) { document.write("foo gave me a bar"); }
它更加压缩,如果展开,大括号不会被遗忘。是否有任何明显的问题,如果没有,有什么考虑?我觉得它仍然非常可读,至少和三元运算符一样多。在我看来,由于可读性,三元运算符并没有被建议那么多,尽管我觉得这个结论并不那么一致。
我内心的邪恶双胞胎想要提出这个建议,尽管语法显然不是为了它,而且可能只是一个坏主意。
(syntax) ? document.write("My evil twin emerges"): "";
我已经看到了用于实现此目的的&&
运算符的短路行为,尽管不习惯这样做的人可能会发现很难阅读甚至称之为反模式:
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");
您可以使用PHP中常用的这种格式:
(lemon) ? document.write("foo gave me a bar") : document.write("if condition is FALSE");
如前所述,您可以使用:
&& 风格
lemons && document.write("foo gave me a bar");
或
无支架样式
if (lemons) document.write("foo gave me a bar");
短路回路
但是,如果您希望使用单行if
语句来短路函数,则需要使用无括号的版本,如下所示:
if (lemons) return "foo gave me a bar";
如
lemons && return "foo gave me a bar"; // does not work!
会给你一个SyntaxError: Unexpected keyword 'return'
可以使用这个,
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")
这一行要干净得多。
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");
(i === 0 ? "true" : "false")
我看到过很多答案,很多投票都提倡使用三元运算符。如果 a( 您确实有替代选项并且 b( 您从简单条件返回一个相当简单的值,则三元很棒。 但。。。
原始问题没有替代方案,只有一个(真实(分支的三元运算符迫使您返回一个混合的答案。
lemons ? "foo gave me a bar" : "who knows what you'll get back"
我认为最常见的变体是lemons ? 'foo...' : ''
,而且,正如您从阅读有关真,假,真,假,空,零,空白,空(我们的没有?(的任何语言的无数文章中所知道的那样,您正在进入一个雷区(尽管这是一个有据可查的雷区。
一旦三元的任何部分变得复杂,你最好使用更明确的条件形式。
说我投票给if (lemons) "foo"
还有很长的路要说.
当使用这样的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, '@&'));
- 可以't让我的if语句处理js中的html表单输入
- 轻量级zxcvbn替代方案
- 如果 a 为 false,则 if(a) === if(false)
- 正在寻找比$(document).ready慢的$(window).load的替代方案
- ng映射方向备选方案
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- 正在尝试使用if和else添加类,但无法正常工作
- 在PHP中使用javascript更改页面标题'if'
- gulp-if-javascript文件,但不在gulp-useref的特定目录中
- 如何在 API 调用后和 if 语句中启用提交按钮
- 带有多个elseif的Javascript if语句
- 为什么$.brower被弃用?还有什么更好的替代方案
- 什么是&&在没有if的行中的变量之间
- 另一个if(!$scope.$$phase)$scope$apply()szenario-需要帮助才能通关
- 为什么在javascript中同时运行if()和else的确认?什么是解决方案
- 什么'这是我冗长的IF语句的替代方案
- javascript中if(a>b)的有效替代方案,用于检查变量范围
- JavaScript 单行 'if' 语句 - 最佳语法,这个替代方案
- 关于JS嵌套if语句的更好的解决方案