Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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片段是否相同_Javascript_Coding Style - Fatal编程技术网

我想知道这两个JavaScript片段是否相同

我想知道这两个JavaScript片段是否相同,javascript,coding-style,Javascript,Coding Style,我是JavaScript新手,我想了解更多 例如: a == true && alert("a is true"); 这是否类似于: if(a == true) { alert("a is true"); } 如果上面的代码是正确的,并且两者相等,那么我想知道所有的运算符和条件。在哪里可以找到它们?这段代码做同样的事情,检查a是否为真,然后调用函数alert,我想我可以说是相同的。回答:结果,即警报框,将是相同的。 说明: 对于&表达式,大多数语言设计为仅当第一个表达

我是JavaScript新手,我想了解更多

例如:

a == true && alert("a is true");
这是否类似于:

if(a == true)
{
    alert("a is true");
}

如果上面的代码是正确的,并且两者相等,那么我想知道所有的运算符和条件。在哪里可以找到它们?

这段代码做同样的事情,检查a是否为真,然后调用函数alert,我想我可以说是相同的。

回答:结果,即警报框,将是相同的。

说明:

对于
&
表达式,大多数语言设计为仅当第一个表达式计算为
true
时才计算第二个表达式

这意味着如果
a
的计算结果为
false
null
未定义的
0
,或
NaN
警报(“a为真”)
将不会被计算,并且您将看不到警报框

JavaScript的值可以是“truthy”或“falsy”,我建议您在这里阅读更多关于这方面的内容:

因此,这取决于您对“相同”的定义,即看到或不看到警报框的结果是相同的



如果您想更多地了解JavaScript中的不同操作符及其工作原理,请查看:。

它们都做相同的事情。归根结底,这取决于您喜欢代码的外观,大多数人(我认为)都认为第二个版本最好阅读

If
语句在遇到false时停止执行(对于&&operators),因此第一条语句说“如果a为true,那么如果alert…”,这意味着如果a为true,那么将显示警报


这与第二个版本的结果完全相同。

这不是Javascript的特殊语法,只是缩短代码的技巧

没有魔法。这只是一个简单的逻辑。通常,代码最小化者使用这些技巧来缩短代码。此行为基于&&和| |运算符的重要属性-如果从表达式的第一部分知道结果,则它们不会计算表达式的第二部分(与总是计算表达式的两部分的&和|运算符相反)

使用说明:

a==true && alert("a is true");
如果“a”为false-javascript引擎分析整个表达式也必须为false(因为“&&”(AND)逻辑运算符的含义)-并且忽略表达式的第二部分,因为无论返回什么结果,它都不会更改整个表达式的结果。因此它不会运行“警报”。相反,如果“a”为true,则Javascript引擎需要知道表达式第二部分的结果,并运行“alert”。这种行为模仿了通常的“如果”语句

a==false || alert("a is true");
这一个使用“或”逻辑运算符。如果“a”为false,则无需计算表达式的第二部分,并触发“alert”。如果“a”为true,则表达式的第二部分可能为true,而整个表达式的计算结果为true,因此javascript引擎运行“alert”

此外,这些捷径可以缩短得更多。因为不需要比较两个布尔值:“a”和“true”,因为“a”已经是布尔值。它作出以下规定:

a && alert("a is true");
基本上,您不需要手动使用这些东西,只需使用普通的“if”语句——这将使您的代码可读。然后,如有必要,您可以使用代码最小化来缩短生产代码


快乐编码

两者之间的唯一区别在于这是一个表达式:

a == true && alert("a is true");
但这是一个声明:

if (a == true) {
    alert('a is true');
}
表达式的结果取决于
a==true
的计算结果

false && alert('a is true'); // false (and alert box does not show up)
true && alert('a is true');  // undefined (after alert box is clicked away)
这得益于计算表达式的“短路”行为;使用
&&
,falsy的第一个条件将成为表达式的结果,而不计算其余条件

另一个具有类似行为的运算符是逻辑or。考虑:

a || alert('a is false');
如果
a
的计算结果为falsy,则显示警报框

false || alert('a is false'); // undefined (after alert box is clicked away)
true || alert('a is false');  // true (alert box does not show up)
请注意,具有这些副作用的表达式被认为是“聪明”的解决方案;它们可能会缩短代码,但其初衷并不总是显而易见的

也就是说,这也有很好的用途,例如:

a = a || 'default value';

这将为
a
分配一个默认值(如果为falsy),否则为
a
的原始值。您可以经常看到这些表达式,它们是该语言的一个强大功能。

这两组代码产生相同的结果,但并不相同

对于第一个代码集

a == true && alert("a is true")
使用了

使用
&&
对语句求值时,
false&&anything
短路求值为false

因此,在第一条语句中,如果
a
为false,则不会调用警报(1)。js编译器跳过
alert
语句

a==false || alert("a is true");
如果
a
为真,则执行警报(1),因为该条件未短路


在第二组中,使用正常的
if
条件。检查这个。

在其他答案中有很多很好的例子,
&&
是如何工作的,所以我不打算重复它们。无论如何

计算表达式时,它会发送一个返回值作为结果。在您的特定情况下(第一个示例),返回值不在任何地方使用,结果与第二个示例相同。但是如果我们使用这个返回值,比如在
if
条件中,我们可能会得到一些混乱的结果。下面是一个例子:

var a = true;
if (a == true && alert('a = true')) {
    alert('a really is true');
} else {
    alert('It seems, that a is not true');
}

此代码段将首先警告“a=true”,第二个警告将是“似乎a不是true”。这是因为DOM本机函数
alert()
的返回值返回
undefined
,这使得条件为falsy(
true&&undefined==false
)。因此,我们可以说,您的代码片段在该特定上下文中是相等的,但在某些其他上下文中是不相等的。

这是一个相当不精确的答案。好问题,只需编写大量javascript和loo即可