JavaScript中&和&&有什么区别?
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
这似乎是&&是一个合乎逻辑的“和”,如果两者都是真的,那么它总是给我第二个值。
但是什么是&?
(顺便说一下,&&似乎是“和”在Python中;&似乎是在Python中)。
&
是按位与
这个操作员期待两个数字并回退一个数字。 如果他们不是数字,他们被转换为数字。
它是如何工作的? 维基百科有一个答案: https : //en.wikipedia.org/wiki/Bitwise_operation#AND
注意:在Javascript中, 不鼓励使用此运算符,因为没有整数数据types,只是浮点数。 因此,在每次操作之前,浮动都会转换为整数,使其变慢。 另外,它在典型的Web应用程序中没有真正的用处,并且产生不可读的代码。
一般规则:避免。 不要使用它。 它很less有可维护和可读的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)
这个定义符合逻辑和math领域的定义。
&&
操作符链接
这个操作符如上定义的原因是操作符链接。 你可以链接这个运营商,并保持上述规则。
true && 20 && 0 && 100 0 (it is the first false-y) 10 && 20 && true && 100 100 (last one, since all are true-y)
&&
短路
从定义中可以看出,只要你发现一个术语是假的,你就不需要关心下面的术语。 Javascript甚至更进一步,这些条款甚至没有评估。 这被称为短路。
true && false && alert("I am quiet!")
该语句不会提醒任何事情,并返回false
。 因此,您可以使用&&
运算符作为if语句的更短替代。 这些是等价的:
if (user.isLoggedIn()) alert("Hello!") user.isLoggedIn() && alert("Hello!")
几乎所有的JS压缩机都使用这个技巧来保存2个字节。
&
是按位“和”。 这意味着如果您将两个数字转换为二进制数,则结果是一个数字,在两个数字都为1
的位置上有一个数字。
100011 //35 & 111001 //57 --------- 100001 //35 & 57 == 33
要确定两个布尔值放在一起是正确的还是错误的,如果你想同时检查它们(比如在网页上validation),你可以使用“&”运算符。 “&”是按位与。
使用“&&”运算符,一旦发现第一个值为假,它将结束评估,而不检查第二个值。