Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';这两者的区别是什么;及&;用JavaScript?_Javascript_Bitwise Operators_Logical Operators - Fatal编程技术网

什么';这两者的区别是什么;及&;用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); //

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
看起来&&是一个逻辑上的“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。我不怀疑你的总体担忧。我总是遵从并建立===惯例。然而,在这里,所有四项评估都是必要的,与你上次善意的评论相反。所有四项评估都需要进行!==并在括号内以该格式使用。这是我的梦想