js java 运算符优先级用法总结

java与js运算符优先级基本类似,如下图所示:


大家没必要去死记运算符的优先级顺序,实际开发中,一般会使用小括号辅助进行优先级管理。例如:

           int m = 12;
           int n = m << 1 + 2;
           int o = m << (1 + 2); //这样更直观
           System.out.println(n);
           System.out.println(o);

java与js中的&&、& ||、| 用法稍有不同:

在java中使用逻辑与“&”运算,如果运算符表达式两端符合逻辑运算规则,则就是按逻辑运算判断结果,true或false,而两端若是为数值类型的则是位运算,这时我们需通过进行二进制位运算来判断结果,一端为关系表达式一端为数值类型的数字不合法,编译出错。js中使用逻辑与“&”时 与java不同,它是把“&”一直作为位运算符来操作,并没有逻辑与的意思。而在js中它把逻辑值true当做1,false当做0,然后再进行位运算得出运算结果。

System.out.println(1|2);//错误的写法,编译通过 输出结果?

System.out.println(3>5&2<3);//false 

System.out.println(1>0|2<0);//true 

document.write((1>0|2<1)+"<Br>"); //1  关系运算---->位运算

document.write((1>2&2)+"<Br>"); //0  关系运算---->位运算

document.write((1>0|1)+"<Br>"); //1 关系运算---->位运算


短路与“&&”短路或“||”在java中还是比较好掌握的,只要遵循其原则。而在js中则显得有些灵活不定,它将js中关系运算结果true为1,false为0,所以它跟其表达式两端类型的不同而得到不同逻辑类型或者数值类型的结果。       
        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);//错误,编译不通过


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

猜你喜欢

转载自blog.csdn.net/xianrenyingzi/article/details/78261548