我是 JavaScript 新手,我想了解更多关于它的信息。
例如:
a == true && alert("a is true");
这是否类似于:
if(a == true)
{
alert("a is true");
}
如果上面的代码是正确的并且它们都相等,那么我想知道所有这样的运算符和条件。我在哪里可以找到它们?
我是 JavaScript 新手,我想了解更多关于它的信息。
例如:
a == true && alert("a is true");
这是否类似于:
if(a == true)
{
alert("a is true");
}
如果上面的代码是正确的并且它们都相等,那么我想知道所有这样的运算符和条件。我在哪里可以找到它们?
答案:结果,即警告框,将是相同的。
解释:
大多数语言设计为仅在第一个表达式评估为 时才评估第二个表达式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。
两者之间的唯一区别是这是一个表达式:
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
。您可以经常看到这些表达式,它们是该语言的一个强大功能。
它不是 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”语句——它会让你的代码可读。然后,如有必要,您可以使用代码最小化器来缩短生产代码。
快乐编码!
在其他答案中有很多很好的例子,如何&&
工作,所以我不会重复它们。无论如何...
计算表达式时,它会发送一个返回值作为结果。在您的特定情况下(第一个示例),返回值不在任何地方使用,结果与第二个示例相同。但是如果我们使用那个返回值,比如在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
)。因此,我们可以说,您的代码片段在该特定上下文中是相等的,但在其他某些上下文中则不同。
他们都做同样的事情。这取决于您喜欢代码的外观,并且大多数人(我认为)会同意第二个版本最好阅读。
If
语句在遇到错误时停止执行(在 && 运算符的情况下),因此第一个语句说“如果 a 为真,则如果警报...”,这意味着如果 a 为真,则将显示警报。
这与第二版的结果完全相同。
这段代码做同样的事情,检查 a 是否为真然后调用函数警报,我想我可以说是一样的。