什么';这两者的区别是什么;及&;用JavaScript?
JavaScript中&和&&之间有什么区别 示例代码:什么';这两者的区别是什么;及&;用JavaScript?,javascript,bitwise-operators,logical-operators,Javascript,Bitwise Operators,Logical Operators,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); //
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
看起来&&是一个逻辑上的“and”,如果两者都为真,它总是给我第二个值
但是什么是&
(顺便说一句,在Python中,&&似乎是“and”,在Python中,&&似乎是。&
是按位和
此运算符需要两个数字,并重新调用一个数字。如果不是数字,则转换为数字
它是如何工作的?维基百科有一个答案:
注意:在Javascript中,不鼓励使用此运算符,因为没有整数数据类型,只有浮点。因此,浮点在每次操作之前都会转换为整数,这会使操作变慢。而且,它在典型的web应用程序中没有实际用途,并且生成不可读的代码
一般规则:避免。不要使用它。它在可维护和可读的JS代码中很少有一席之地
&&
是逻辑和
它需要两个参数并返回:
- 计算结果为false的第一个术语
- 最后一项否则(如果全部为true-y)
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语句的较短替换。这些是等效的:
if (user.isLoggedIn()) alert("Hello!")
user.isLoggedIn() && alert("Hello!")
几乎所有的JS压缩器都使用这个技巧来节省2个字节。
&
是按位的“and”。这意味着,如果将两个数字转换为二进制,则结果是一个数字的1
位数位于两个数字的1
位置
100011 //35
& 111001 //57
---------
100001 //35 & 57 == 33
要确定两个布尔值放在一起是真还是假,如果要同时检查它们(如网页上的验证),可以使用
&
运算符<代码>&是按位和
使用
&&
运算符,一旦发现第一个值为false,它将结束计算,而不检查第二个值。尽管有着高深而详细的见解,但他们大多忽略了一个事实,即存在一个条件计算,其中只有单个&可以工作。这个实用的外行回答解决了我在一个包含多个链式&&each!==导致故障并需要合法使用单一&。我感谢Jake Wayne(和Russ)不公平地否决了他们的答案,他们的答案正确无误,因为有不止一个&&that!==它已停止评估,并且在找到第一个评估==!”后不再继续!。对于&&它认为它的工作是在第一次评估显示之后完成的!==[如假]。我失败的代码是
IF ((sessionStorage.myLable !== "LableStringA") && (sessionStorage.myLable !== "LableStringB") && (sessionStorage.myLableZ !== "LableStringA") && (sessionStorage.myLableZ !== "LableStringB")) { ...)
在这里,正确地用一个&来代替&&它实际上在现实世界中也是正确的答案。再次感谢Jake Wayne(和Russ)对代码的洞察和理解。&&在JavaScript.AFAIK中不返回布尔值,
&&
返回第一个值,如果为false-y,则返回第二个值,否则返回第二个值。答案已完全修改。如果返回第一个值,则我不明白如何运行此操作:if($('#form1')。parsley().validate()==true&&$('#form2').parsley().validate()==true){//如果两个表单都有效,请执行某些操作},因为如果它为false,它将在第一个函数中退出,并且永远不会验证第二个表单,那么,如何运行IF语句?@user777不是无关紧要的,如果您的操作只应在两次验证时进行,那么第二个表单是否被验证是无关紧要的?如果第一个表单失败,则整个操作无效。然而,这实际上是一个完全独立的问题,因为这个线程是关于返回的,而不是在if语句中使用。在处理布尔值时,您不使用按位AND(&
)。请参考其他关于正确使用此运算符的答案。@drrcknlsn,我阅读了其他答案,但此处的解释非常有效,您能否提供有关您的索赔的更多信息???@BLUDAREAM:此答案中的解释是错误的。逻辑(布尔)比较不使用位运算符。使用逻辑(布尔)运算符。它们做不同(尽管相似)的事情,期望不同的输入,产生不同的输出,并且具有不同的运算符优先级。我同意这是一种不好的做法,但使用&和布尔值将起作用。false的计算结果为0,true的计算结果为1。我看不出这个答案在技术上有任何错误,因为你“可能”使用&,只是不推荐。如果你不理解它,我不建议你使用“仅仅因为它有效”的东西。你只是在给自己设置麻烦,当它最终无法工作时,你无法调试它。甚至更糟糕的是,当你在面试中使用它时,他们会像你一样看着你ಠ_ಠ. 如果您的条件没有评估您期望的结果,那么您就有一个逻辑错误。如果第一个条件返回false,则没有理由计算所有4个条件,因为在这种情况下,组合条件的计算结果永远不会为true。我不怀疑你的总体担忧。我总是遵从并建立===惯例。然而,在这里,所有四项评估都是必要的,与你上次善意的评论相反。所有四项评估都需要进行!==并在括号内以该格式使用。这是我的梦想