我最近在一次采访中被问到了这个问题。 我知道在JavaScript中评估从左到右。 1 && 2应该是假的吧? 我在这里读到另一个问题,即1 && 2返回2。而AND返回第一个伪造的值。但是感觉模糊。有人可以详细说明吗?
答案 0 :(得分:8)
1 && 2 && 3
相同
if (1) {
if (2) {
if (3) {
return 3
} else {
return 3
}
} else {
return 2
}
} else {
return 1
}
1 && 2 && 3 //3
1 && 0 && 3 //0
1 && false && 3 //false
false && 0 && 3 //false
1 && 0 && false //0
答案 1 :(得分:7)
AND(&&
)运算符执行以下操作:
从左到右评估操作数。
对于每个操作数,将其转换为布尔值。如果结果为假,则停止并返回该操作数的原始值。
如果所有操作数都已求值(即全部为真),则返回最后一个操作数。
换句话说,AND返回第一个伪造的值,或者如果没有找到,则返回最后的值。当所有值均为真时,将返回最后一个值。
参考:https://javascript.info/logical-operators
1 && 2应该是错误的吧?
不,在Java脚本中的布尔上下文中,这些值被转换为truthy。只有六个值被转换为falsy,它们是:false
,0
,空字符串(例如''
,""
),{{ 1}},null
和undefined
。
答案 2 :(得分:1)
如果&&的左侧为假值,则整个表达式的值为左侧。
否则,它的评估结果为右侧。
这就是datatables
给您3的原因。
答案 3 :(得分:1)
logical AND &&
返回最后的truthy值,或者首先找到的falsy值。
brands: [
0:ZARA: {product: "ZARA Black Shiny Shirt",fit: "Slim Fit",size: "46"},
1:H&M: {product: "H&M Black Shirt",fit:50 "Regular Fit",size: "44"}
]
答案 4 :(得分:0)
&&
是表达式的布尔AND运算符。对部分表达式的求值照常进行。结果不是布尔值,而是解释为“真”或“虚假”(由12.13 of the ECMAScript standard表示)。
因此,JS引擎必须评估所有表达式,直到找到的第一个虚假值(然后,总结果就是该第一个虚假值,解释为false
),直到没有其他表达式为止。 />
该标准要求从左到右进行评估(12.13.3 of ECMAScript standard)。
Falsy / Truthy的确切定义是:
false
,0
,""
,null
,undefined
,NaN
之一这在section 7.1.2 of the standard中ToBoolean
函数的定义中指定。另请参阅MDN上的词汇表以获取清晰摘要(falsy,truthy)
答案 5 :(得分:0)
0以外的所有数字在&上执行&&时返回true,并且当所有操作数为true时&&返回正确的值1 && 2返回2,而2 && 3将返回3