14

我是 JavaScript 新手,我想了解更多关于它的信息。

例如:

a == true && alert("a is true");

这是否类似于:

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

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

4

7 回答 7

17

答案:结果,即警告框,将是相同的。

解释:

大多数语言设计为仅在第一个表达式评估为 时才评估第二个表达式true,在表达式的情况下&&

这意味着如果a计算结果为false, null, undefined, 一个空字符串, 0, 或NaN,alert("a is true")将不会被计算,并且您不会看到警告框。

JavaScript 的值可以是“真”或“假”,我建议您在此处阅读更多相关信息:http: //11heavens.com/falsy-and-truthy-in-javascript

所以,这取决于你对“相同”的定义,结果,即看到或没有看到警告框,是一样的。


如果您想了解更多关于 JavaScript 中不同运算符以及它们如何工作的信息,请查看:developer.mozilla.org/en-US/docs/JavaScript/Guide/Expressions_and_Operators

于 2012-12-06T10:09:58.353 回答
7

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

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)

这要归功于评估表达式的“短路”行为;使用&&,第一个错误的条件将成为表达式的结果,而不计算其余条件。

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

a || alert('a is false');

如果a计算结果为假,这将显示警报框。

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原始值a。您可以经常看到这些表达式,它们是该语言的一个强大功能。

于 2012-12-06T10:29:44.153 回答
2

它不是 Javascript 的特殊语法——它只是缩短代码的技巧。

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

用法说明:

a==true && alert("a is true");

如果 'a' 为假 - javascript 引擎分析整个表达式也必须为假(因为 '&&' (AND) 逻辑运算符的含义) - 它省略了表达式的第二部分,因为无论它返回什么结果都不会改变整个表达式的结果。所以它不会运行“警报”。相反,如果“a”为真 - Javascript 引擎需要知道表达式第二部分的结果并且它运行“警报”。这种行为模仿了通常的“if”语句。

a==false || alert("a is true");

这一个使用“或”逻辑运算符。如果“a”为假,则无需评估表达式的第二部分并触发“警报”。如果“a”为真,则表达式的第二部分有可能为“真”,整个表达式的计算结果为“真”——因此 javascript 引擎运行“警报”。

此外,这些快捷方式可以进一步缩短。因为不需要比较两个布尔值:'a'和'true',因为'a'已经是布尔值。它使以下内容:

a && alert("a is true");

基本上你不需要手动使用这些东西,只需使用普通的“if”语句——它会让你的代码可读。然后,如有必要,您可以使用代码最小化器来缩短生产代码。

快乐编码!

于 2012-12-06T10:29:04.673 回答
1

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

计算表达式时,它会发送一个返回值作为结果。在您的特定情况下(第一个示例),返回值不在任何地方使用,结果与第二个示例相同。但是如果我们使用那个返回值,比如在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 不正确”。这是由于 DOM 原生函数的返回值alert(),它返回undefined,这使得条件为 falsy( true && undefined === false)。因此,我们可以说,您的代码片段在该特定上下文中是相等的,但在其他某些上下文中则不同。

于 2012-12-06T12:06:09.180 回答
0

他们都做同样的事情。这取决于您喜欢代码的外观,并且大多数人(我认为)会同意第二个版本最好阅读。

If语句在遇到错误时停止执行(在 && 运算符的情况下),因此第一个语句说“如果 a 为真,则如果警报...”,这意味着如果 a 为真,则将显示警报。

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

于 2012-12-06T10:11:15.677 回答
0

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

对于第一个代码集,

a == true && alert("a is true")

使用逻辑运算符&&

使用 ,评估语句时&&false && anything短路评估为假。

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

如果a为真,则执行 alert(1),因为条件没有短路。

在第二组中,使用正常if条件。检查此链接

于 2012-12-06T10:30:17.703 回答
-1

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

于 2012-12-06T10:08:22.650 回答