Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript&&;运算符作为if语句?_Javascript_Boolean_Boolean Expression - Fatal编程技术网

Javascript&&;运算符作为if语句?

Javascript&&;运算符作为if语句?,javascript,boolean,boolean-expression,Javascript,Boolean,Boolean Expression,这应该是一个非常简单的问题,我在任何地方都找不到答案,所以我想我应该节省一些时间,在这里提问 我正在看一些javascript代码,注意到表单的一个表达式: a < b && (other maths statements); a

这应该是一个非常简单的问题,我在任何地方都找不到答案,所以我想我应该节省一些时间,在这里提问

我正在看一些javascript代码,注意到表单的一个表达式:

a < b && (other maths statements);
a
其他的数学陈述只是变量赋值和简单的东西

我的问题是。这是编写紧凑if语句的另一种方法吗

我知道那句话?if block:else block;这是一种方法,但由于&&是短路和左联想,这就是我所能想到的。我知道用这种方法你不能有一个else块,但它非常简洁

有人能证明我早上这个时候醒着吗

谢谢,

是的,你能行。如果
a
小于
b
,则将执行其他语句

也就是说,你可能不应该这么做。与其尝试为自己节省少量输入,不如使用一段可读性更强的代码,其目的是显而易见的。毕竟,如果您需要检查您是否误解了它,那么其他可能需要阅读或修改您的代码的程序员也可能会遇到同样的问题

如果您尝试执行多个赋值,但中间的一个赋值是“false”值,那么这也有一个陷阱。考虑这个例子:

a < b && (a = 1) && (b = 0) && (c = 3);
a

基本上,如果
a
小于
b
,则将
a
设置为1,
b
设置为0,
c
设置为3。但是,
(b=0)
返回false(当转换为布尔值时,0被视为false),因此
(c=3)
部分永远不会执行。显然,在这个基本示例中,任何对JavaScript有一定了解的人都可能认为它会失败,但是如果
a
的值,
b
c
是从其他地方来的,没有立即的迹象表明它不会一直工作。

您可以使用这种类型的if-else语句来编写较短的代码,尽管在我看来它的可读性较差:

JavaScript

var el = document.getElementById('test'),
a = 1,
b = 0;

a>b && (el.innerHTML = "True") || (el.innerHTML = "False");
<div id="test"></div>
HTML

var el = document.getElementById('test'),
a = 1,
b = 0;

a>b && (el.innerHTML = "True") || (el.innerHTML = "False");
<div id="test"></div>


如果将运算符从大于切换到小于,您将看到“test”DIV内打印的“False”。

这只是一个布尔表达式,它将返回
true
False
。它可以在if语句中使用。但是如果没有
if(a&&b)
或对变量的任何赋值,它什么也做不了……只是不做而已。可读性/可维护性比说“嘿,我在一行中写了同样的东西;这不是很酷吗?”。如果这是出于某种学术目的,那么这是另一回事。是的,它的工作原理和你想象的短路评估完全一样。不,这并不一定比编写
if(…)
好,因为它会提示类似的问题。对于单个赋值操作,使用三元运算符更有意义:
el.innerHTML=(a>b?“True”:“False”)。您的示例更接近于在Lua这样的语言中如何做到这一点,它缺少实际的三元运算符,但具有与JavaScript相同的动态类型和隐式布尔转换。我同意。三元运算符是简化if-else语句的更好示例,尤其是在单赋值的简单情况下。尽管如此,正如我们在回答中所说的,这两个例子都不太可读,并且使您的代码更难理解。您是对的,可读性是关键!三元运算符相当容易理解,尽管大多数人在某一点上都会遇到它。我提出的方法对我来说是一种新颖的方法,所以非常感谢你回答我的想法。我只是想理解今天早上收到的一些代码。如果我真的想在一行上完成,我会使用条件?if block:else block方法,但这是一种有趣的方法。我也喜欢你的例子(但你是对的,大多数掌握编程基本知识的人都应该意识到这一点)?不过,这是一个相当好的观点——它可能不会立即显现出来。