我是JavaScript新手,我想了解更多信息。
例如:
a == true && alert("a is true");
这类似于:
if(a == true)
{
alert("a is true");
}
如果上面的代码是正确的,如果它们都相同,那么我想知道所有这些运算符和条件。我在哪里可以找到它们?
答案 0 :(得分:17)
答案:结果,即警告框,将是相同的。
说明:
大多数语言都是为了评估第二个表达式,只有在第一个表达式评估为true
时才会出现&&
表达式。
这意味着,如果a
评估为false
,null
,undefined
,空字符串,0
或NaN
,{ {1}}将不会被评估,您将看不到警告框。
JavaScript的值可能是“真实”或“虚假”,我建议您在此处详细了解:http://11heavens.com/falsy-and-truthy-in-javascript。
所以,这取决于你对“相同”的定义,结果,即看到或没有看到警告框,是相同的。
如果您想了解JavaScript中不同运算符的更多信息以及它们的工作原理,请查看:developer.mozilla.org/en-US/docs/JavaScript/Guide/Expressions_and_Operators。
答案 1 :(得分: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
。您可以经常看到这些表达式,它们是该语言的强大功能。
答案 2 :(得分:2)
这不是Javascript特殊语法 - 它只是缩短代码的技巧。
没有魔力。这只是一个简单的逻辑。通常,代码最小化器使用这些技巧来缩短代码。此行为基于&&和||运算符重要属性 - 如果从第一部分知道结果(与&和|运算符相反,它们总是计算表达式的两个部分),它们不会计算表达式的第二部分。
用法解释:
a==true && alert("a is true");
如果'a'为假 - javascript引擎分析整个表达式也必须是假的(因为'&&'(AND)逻辑运算符的含义) - 并且它省略了表达式的第二部分,因为无论什么它返回结果它不会改变整个表达式的结果。所以它不会运行'警报'。相反,如果'a'为真 - 比Javascript引擎需要知道表达式的第二部分的结果并且它运行'alert'。这种行为模仿了通常的'if'陈述。
a==false || alert("a is true");
这个使用'OR'逻辑运算符。如果'a'为假,则无需评估表达式的第二部分,并触发'alert'。如果'a'为真,则表达式的第二部分有可能为'true'且整个表达式的计算结果为'true' - 因此javascript引擎运行'alert'。
此外,这些捷径可以进一步缩短。因为不需要比较两个布尔值:'a'和'true',因为'a'已经是布尔值。它有以下几点:
a && alert("a is true");
基本上你不需要手动使用这些东西,只需使用普通的'if'语句 - 它将使你的代码可读。然后,您可以根据需要使用代码最小化来缩短生产代码。
快乐的编码!
答案 3 :(得分: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”,第二个警报将是“看起来,这不是真的”。这是由于DOM本机函数alert()
的返回值,它返回undefined
,这使得条件为假(true && undefined === false
)。因此,我们可以说,您的代码片段在该特定上下文中是相等的,但它们不在其他某些上下文中。
答案 4 :(得分:0)
他们都做同样的事情。这取决于您希望代码看起来如何,大多数(我认为)会同意第二个版本最好阅读。
If
语句在出现错误时停止执行(在&&运算符的情况下),因此第一个语句说“如果a是真,那么如果警告...”,意思是如果a为真,则会显示警报。
这与第二版完全相同。
答案 5 :(得分:0)
这两组代码产生的结果相同但不一样
对于第一个代码集,
a == true && alert("a is true")
在使用&&
评估语句时,false && anything
的短路评估为false。
因此,如果a
为false,则在第一个语句中不调用alert(1)。 js编译器跳过alert
语句。
如果a
为真,则执行alert(1),因为条件没有短路。
在第二组中,使用正常的if
条件。请检查此link。
答案 6 :(得分:-1)
这段代码做同样的事情,检查一下是否为真,然后调用函数提醒,我想我可以说是一样的。