JavaScript中的&和&&有什么区别?
示例代码:
var first = 123; var second = false; var third = 456; var fourth = "abc"; var fifth = true; alert(first & second); // 0 alert(first & third); // 72 alert(first & fourth); // 0 alert(first & fifth); // 1 alert(first && second); // false alert(first && third); // 456 alert(first && fourth); // abc alert(first && fifth); // true
似乎&&是一个逻辑上的“和”,如果两个都为true,则总是为我提供第二个值。
但是什么是&?
(顺便说一下,&&在Python中似乎是“ and”;&在Python中似乎是&。)
&
该运算符期望 两个数字 并重新调整一个 数字。 如果它们不是数字,则将其强制转换为数字。
注意: 在Javascript中, 不建议 使用此运算符 , 因为没有整数数据类型,只有浮点数。因此,浮点数在每次操作之前都会转换为整数,从而使其变慢。而且,它在典型的Web应用程序中没有真正的用途,并且会产生无法读取的代码。
一般规则:避免。 不要使用它。它很少放在可维护和可读的JS代码中。
&&
它需要两个参数并返回:
这里有些例子:
0 && false 0 (both are false-y, but 0 is the first) true && false false (second one is false-y) true && true true (both are true-y) true && 20 20 (both are true-y)
如果您只在布尔值上使用过它,那么这正是数学逻辑中的AND运算符。
如上所述定义此运算符的原因是运算符链接。您可以链接此运算符,并且仍然保留上述规则。
true && 20 && 0 && 100 0 (it is the first false-y) 10 && 20 && true && 100 100 (last one, since all are true-y)
从定义中可以看出,一旦您发现一个术语为假y,就不必关心以下术语。Javascript甚至更进一步,术语甚至都没有评估。这称为短路。
true && false && alert("I am quiet!")
该语句不发出任何警告,false并返回。因此,可以将&&运算符用作if语句的更短替代。这些是等效的:
false
if (user.isLoggedIn()) alert("Hello!") user.isLoggedIn() && alert("Hello!")
几乎所有的JS压缩程序都使用此技巧来节省2个字节。