为什么JavaScript在非布尔值&;中选择较大的数字&;声明?

为什么JavaScript在非布尔值&;中选择较大的数字&;声明?,javascript,boolean-operations,fuzzy-logic,Javascript,Boolean Operations,Fuzzy Logic,在JavaScript中,0&&1的计算结果为0,这是两者中较低的一个。那么,为什么0.1&&1的计算结果为1,两者中较高的一个? 类似地,为什么0 | | 1计算为1,而0.1 | | 1计算为0.1与哪个值更大无关,操作符将为规范返回适当的值 在&&的情况下,如果第一个参数为false,将返回它。否则返回第二个。在您的示例中,0.1&&1,0.1是一个truth-y值,因此返回1。您可以很容易地尝试100000000&&0.1,并看到0.1返回。0&&1返回0的原因是0为false-y,因此

在JavaScript中,
0&&1
的计算结果为
0
,这是两者中较低的一个。那么,为什么
0.1&&1
的计算结果为
1
,两者中较高的一个?
类似地,为什么
0 | | 1
计算为
1
,而
0.1 | | 1
计算为
0.1
与哪个值更大无关,操作符将为规范返回适当的值

&&
的情况下,如果第一个参数为false,将返回它。否则返回第二个。在您的示例中,
0.1&&1
0.1
是一个truth-y值,因此返回
1
。您可以很容易地尝试
100000000&&0.1
,并看到
0.1
返回。
0&&1
返回
0
的原因是
0
为false-y,因此根据规范,返回第一个值


同样,使用
|
时,如果第一个参数为true,则将返回该参数。否则将返回第二个值。

它与哪个值更大无关,运算符将返回规范的适当值

&&
的情况下,如果第一个参数为false,将返回它。否则返回第二个。在您的示例中,
0.1&&1
0.1
是一个truth-y值,因此返回
1
。您可以很容易地尝试
100000000&&0.1
,并看到
0.1
返回。
0&&1
返回
0
的原因是
0
为false-y,因此根据规范,返回第一个值


同样,使用
|
时,如果第一个参数为true,则将返回该参数。否则将返回第二个。

&
|
运算符不会返回基于不等式的值,例如

a&b
的作用如下:

if (a) {
    return b;
}
else {
    return a;
}
if (a) {
    return a;
}
else {
    return b;
}
a | | b
的作用如下:

if (a) {
    return b;
}
else {
    return a;
}
if (a) {
    return a;
}
else {
    return b;
}
if
语句基于“truthy”和“false”值的概念,其中
0
NaN
null
未定义的
'
false
都是“false”。所有其他价值观都是“真实的”

0&&1
计算结果为
0
,因为
0
是错误的。

0.1&&1
的计算结果为
1
,因为
0.1
是真实的。

&
|
运算符不会基于诸如
之类的不等式返回值

a&b
的作用如下:

if (a) {
    return b;
}
else {
    return a;
}
if (a) {
    return a;
}
else {
    return b;
}
a | | b
的作用如下:

if (a) {
    return b;
}
else {
    return a;
}
if (a) {
    return a;
}
else {
    return b;
}
if
语句基于“truthy”和“false”值的概念,其中
0
NaN
null
未定义的
'
false
都是“false”。所有其他价值观都是“真实的”

0&&1
计算结果为
0
,因为
0
是错误的。
0.1&&1
的计算结果为
1
,因为
0.1
是真实的。

您应该检查一下

基本上,&&将取两个中的第一个,如果它是假的,否则将取第二个

| |的情况正好相反。

你应该看看这个

基本上,&&将取两个中的第一个,如果它是假的,否则将取第二个


| |的情况正好相反。

发生了几件不同的事情:

0是按位
false
,而0以外的任何数字的计算结果都是
true
,因此表达式
0和&1
的计算结果都是
false和&true
,这当然是
false

1是按位
true
,根据上述,任何数字0也计算为
true
,因此
0.1&&1
计算为
true&&true
,即
true

使用上述信息:

0 | | 1
的计算结果为
false | | true
,即
true

最后一个例子可能是最有趣的一个,它与操作员短路有关

逻辑or运算符(
|
)遇到计算结果为
true
的值时会短路或停止计算。因此,如果在赋值操作中使用逻辑or,它将返回表达式中的第一个
true

因此,
0.1 | | 1
返回0.1。但是,如果要计算
1 | | 0.1
,它将返回1


另一方面,逻辑and运算符(
&&
)遇到一个计算结果为
false

的值时,它将短路。发生了几种不同的情况:

0是按位
false
,而0以外的任何数字的计算结果都是
true
,因此表达式
0和&1
的计算结果都是
false和&true
,这当然是
false

1是按位
true
,根据上述,任何数字0也计算为
true
,因此
0.1&&1
计算为
true&&true
,即
true

使用上述信息:

0 | | 1
的计算结果为
false | | true
,即
true

最后一个例子可能是最有趣的一个,它与操作员短路有关

逻辑or运算符(
|
)遇到计算结果为
true
的值时会短路或停止计算。因此,如果在赋值操作中使用逻辑or,它将返回表达式中的第一个
true

因此,
0.1 | | 1
返回0.1。但是,如果要计算
1 | | 0.1
,它将返回1

另一方面,逻辑and运算符(
&&
)将