Bap*_*api -14 javascript c logical-or
考虑下面的代码。
console.log("All" && 1); // 1
console.log("All" || 1); // "All" ?
Run Code Online (Sandbox Code Playgroud)
如您所见,第一个表达式"All" && 1
正确计算为1
。我希望第二个表达式也会"All" || 1
求值1
。但是,它的值为"All"
。为什么这样?
在C中,第二个表达式正确计算为1
。
#include <stdio.h>
int main() {
printf("%d\n", "All" && 1); // 1
printf("%d\n", "All" || 1); // 1
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么JavaScript的行为有所不同?
C语言中的逻辑运算符始终求值为布尔值。在C中,int 1
代表true
和int 0
代表false
。这就是为什么两个表达式,原因"All" && 1
和"All" || 1
,计算为1
。他们在逻辑上都是正确的。为了澄清起见,请考虑以下程序。
#include <stdio.h>
int main() {
printf("%d\n", 20 && 10); // 1
printf("%d\n", 20 || 10); // 1
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在上面的程序中,即使这些表达式中没有表达式20 && 10
,它们20 || 10
仍然会求和。这是有道理的,因为这两个表达式在逻辑上都是正确的。因此,他们评估与JavaScript中的等同。1
1
1
true
如果JavaScript的行为方式Ç没有那么表情"All" && 10
和"All" || 10
将评估为布尔值true
。但是,这不是逻辑运算符在JavaScript中的行为方式。这并不是说他们有越野车。
JavaScript中的值具有真实性和虚假性的概念。例如,值true
,"All"
,10
,[10, 20]
,{ foo: 10 }
,和x => 2 * x
都是truthy。在另一方面,价值观false
,""
,0
,undefined
,和null
是falsy。
JavaScript的逻辑运算符并不总是像C那样对布尔值求值。而是,它们求值为其操作数之一。如果&&
运算符错误,则运算符将求值为其左操作数。否则,它将计算为正确的操作数。同样,如果||
运算符为真,则对其左操作数求值。否则,它将计算为正确的操作数。
现在,价值"All"
是真实的。因此,"All" && 1
求值为右操作数(即1
),而"All" || 1
求值为左操作数(即"All"
)。请注意,1
和和"All"
均为真实值,这意味着它们等效1
于C中的(代表真实性)。
因此,没有。JavaScript不是越野车。
归档时间: |
|
查看次数: |
254 次 |
最近记录: |