java中的逻辑运算符主要逻辑非!、逻辑与&、逻辑或|、短路与&&、短路或||及逻辑异或^
javascript中逻辑运算符同样会有java中这些运算符,不过还是有些不同的。js中的逻辑与是java中短路与“&&”逻辑或是java中短路或“||”而java中逻辑与或在js中是按位运算的来计算的,而在java中则是根据表达式值的类型来判断是否为位运算。
下面来针对举例说明这些问题
首先,java逻辑与“&”与js“&”比较
这里在标题中已经说名了是逻辑与“&”运算,所以在写我们逻辑与运算两端的表达式时需要注意了。不要违反规则了,
规则:逻辑与“&”两端的表达式结果必须是逻辑值类型的也就是必须true或false。明白上面的规则之后,我们来看下面这例子:
java:
System.out.println(1&2);//错误的写法,编译通过 输出结果?
System.out.println(1|2);//错误的写法,编译通过 输出结果?
System.out.println(3>5&2<3);//false
System.out.println(1>0|2<0);//true
js
document.write((1&2)+"<Br>"); // 当然写法错误,但没有报错,并且同样有结果 document.write((1|2)+"<Br>"); //同上 document.write((1>2&2>1)+"<Br>"); //0 先计算关系表达式并进行位运算 document.write((1>0|2<1)+"<Br>"); //1 关系运算---->位运算 document.write((1>2&2)+"<Br>"); //0 关系运算---->位运算 document.write((1>0|1)+"<Br>"); //1 关系运算---->位运算
在上面的例子中,在java中System.out.println(1>0|2);//写法不正确,编译通不过,所以这中情况不成立,在上面的举例中漏掉了这里补充上,“&”运算符通过上面代码及结果分析,我们大体对java与js使用逻辑与运算符的区别了吧,那么我们现在能知道在上面的java举例中那两个编译通过,但是写法符合逻辑运算的规则的结果了吗?答案:按位运算的结果
0或3。
因此,这里我们可以总结一下:在java中使用逻辑与“&”运算,如果运算符表达式两端符合逻辑运算规则,则就是按逻辑运算判断结果,true或false,而两端若是为数值类型的则是位运算,这时我们需通过进行二进制位运算来判断结果,一端为关系表达式一端为数值类型的数字不合法,编译出错。js中使用逻辑与“&”时 与java不同,它是把“&”一直作为位运算符来操作,并没有逻辑与的意思。而在js中它把逻辑值true当做1,false当做0,然后再进行位运算得出运算结果。
其次java中的逻辑或“|”与js中“|”基本和上面的一样,这里就不多描述了。
下面来看看java中短路与“&&”短路或“||”与js中所谓的逻辑与“&&”逻辑或“||”有什么不一样的地方
通过实例来总结:
java实例:
System.out.println(1>0&&2<0);//false
System.out.println(1>0||2>0);//true
// System.out.println(1>0||2);//错误,编译不通过
// System.out.println(1>0&&2);//错误,编译不通过
// System.out.println(1&&2);//错误,编译不通过
// System.out.println(1||2);//错误,编译不通过
js实例:
document.write((1>2&&2>1)+"<Br>");//false
document.write((1>2||2>1)+"<Br>");//true
document.write((1>2&&2)+"<Br>");//false
document.write((1<2||2)+"<Br>");//true
document.write((1<2&&5)+"<Br>");//5
document.write((1>2||2)+"<Br>");//2
document.write((1&&5>3)+"<Br>");//true
document.write((8||1<2)+"<Br>");//8 短路运算,表达式一为true则不继续,结果返回表达式一的值
document.write((1<2||false)+"<Br>");//true
document.write((true&&5<3)+"<Br>");//false 只要有逻辑类型的值参与其中结果一定返回为逻辑true或false
通过上面实例代码及结果分析,短路与“&&”短路或“||”在java中还是比较好掌握的,只要遵循其原则。而在js中则显得有些灵活不定,它将js中关系运算结果true为1,false为0,所以它跟其表达式两端类型的不同而得到不同逻辑类型或者数值类型的结果。所以在js中使用逻辑运算还是需要仔细认真去写的,因为js相对比较灵活,限制规则不是很严格,不注意写错了。或表达式不争确很容易造成结果的改变。
好了,以上就是我对逻辑与、或及短路与、或 位运算在java与js中总结。有什么地方不正确的,还希望大家多多指出,共同进步!