JavaScript逻辑运算符及优先级

本文详细解析了一段由YUIcompressor压缩的JavaScript代码,通过逐步分解和解释,将复杂的压缩代码转换成易读的形式,并阐述了逻辑运算符“&&”与“||”的工作原理及其在实际编程中的应用。

今天看了一段YUI compressor压缩的js代码:

1userNum && (ind += index,ind >= userNum && (ind -= userNum),ind < 0 && (ind === -2 && (ind = -1),ind += userNum),selLi.removeClass("on"),$(selLi[ind]).addClass("on"));

直接疯掉了,估计一下子没几个人能看懂。那么就把他“翻译”一下。

&& (逻辑与)

 

这里主要是一个“&&”运算,首先要搞懂这个,看一个简单的例子:

1var a = 1 && 2 && 3;//3
2var b = 0 && 1 && 2;//0
3var c = 1 && 0  && 2;//0
4alert(a),alert(b),alert(c);

嘿嘿,写法很奇怪,运行的结果是3,0,0。一般我们在if语句中经常用到。“&&” (逻辑与) 运算和“||”运算真好相反,“&&” 运算遇到false就返回。
例如: a && b ,如果 a 为true,直接返回b,而不管b为true或者false 。如果 a 为false 那么直接返回a,上面例子中第一个var a = 1 && 2 && 3;因为1 && 2,1为真,返回2;2&&3, 2为真,返回3 。
搞懂了“&&” 运算,再来看最上的面的YUI compressor压缩的js代码,翻译一下:

01if(userNum){
02ind += index;
03if (ind >= userNum) {
04ind -= userNum
05}
06if(ind < 0){
07if(ind === -2){
08ind = -1;
09}
10ind += userNum;
11}
12selLi.removeClass("on");
13$(selLi[ind]).addClass("on");
14}

 

说来惭愧,年纪大了,足足“翻译”了半个小时,还是在同事的帮助下才“翻译”正确。

||(逻辑或)

再来看看“||”(逻辑或)运算,看例子:

1var a = 0 || 1 || 2;//1
2var b = 1 || 0 || 3;//1
3alert(a),alert(b);

“||”运算遇到true就返回。例如:a || b ,如果 a 为false,直接返回b,而不管b为true或者false 。如果 a 为true,直接返回a,而不会继续往下执行。

&& (逻辑与) 和||(逻辑或)混合使用的时候要注意他们的优先级:

&& (逻辑与) 优先级高于||(逻辑或)
return a && b || c ,
根据a来判断返回值,a 是 false 则肯定返回 c;如果 b , c 都是 true ,那么我们就可以根据 a 来决定b 还是 c ,如果 a 是 false 则返回 c,如果a是true 则返回 b。
return a || b && c
根据优先级相当于先算 b && c ,然后和a 相 或;如果a是true,则返回a,不论是b或c,如果a是false,则如果b是false,返回b,如果b是true,返回c;

1var a = 3  &&  0 || 2;  //2
2 
3var b = 3 || 0  &&  2; // 3
4 
5var c= 0 || 2 && 3; // 3
6alert(a),alert(b),alert(c);

转载于:https://www.cnblogs.com/anjey/archive/2012/08/14/2638172.html

<think>好的,用户想了解不同编程语言中运算符的种类及其优先级。首先,我需要回忆几种主流语言的情况,比如C/C++、Java、Python、JavaScript和Go。每种语言的运算符种类可能有所不同,但大部分基础运算符是相似的,比如算术、关系、逻辑、位运算等。优先级方面,不同语言可能有细微差别,需要分别说明。 首先,C/C++的运算符优先级比较经典,很多其他语言都参考了它。比如,一元运算符优先级最高,然后是乘除,加减,接着是关系运算符逻辑运算符中&&高于||。需要确认具体细节,比如赋值运算符优先级是否最低。 Java的运算符优先级和C/C++类似,可能几乎一致,但最好确认一下,比如instanceof的优先级位置。Python的情况类似,不过像幂运算**的优先级可能比乘除高,这需要特别注意。 JavaScript运算符优先级可能会有一些不同,比如严格相等===和不相等!==优先级如何排列,还有typeof和instanceof的位置。此外,箭头函数的参数列表可能影响运算顺序,但这里用户可能更关注基础运算符。 Go语言比较特别,它的运算符相对较少,比如没有三元运算符。需要注意它的位运算符逻辑运算符优先级,比如&&是否高于||,以及位运算符优先级层次。 接下来需要整理每种语言的运算符类别,比如算术、关系、逻辑、赋值、位运算、其他等。每个类别举几个例子,并给出它们的优先级顺序。例如,在C/C++中,优先级从高到低可能是一元、乘除、加减、移位、关系、等于、位运算、逻辑、赋值。 同时,用户提供的引用中提到Go语言中整数溢出不会引发异常,编译器不会假设溢出不发生,这可能影响运算符的行为,但优先级部分可能不直接相关,不过可以提到不同语言处理溢出的差异。 另外,引用中提到了延迟作业的计时器启动条件,这可能和运算符无关,但需要确保不混淆。用户的问题主要集中在运算符种类和优先级,所以需要集中在这个主题。 生成相关问题需要考虑用户可能的后续疑问,比如运算符重载、不同语言差异、优先级错误导致的常见问题、如何记忆优先级、自定义运算符的可能性等。确保问题覆盖用户可能感兴趣的扩展方向。 最后,确保回答结构清晰,分点列出每种语言的情况,使用表格或列表形式更直观。同时,按照系统指令,数学公式用$...$,独立公式用$$...$$,但这里可能涉及较少数学公式,主要注意代码块的格式和引用标识的正确添加。</think>### 不同编程语言中运算符种类及优先级对比 不同编程语言的运算符种类和优先级规则存在差异,以下是几种主流语言的总结: --- #### **1. C/C++** - **运算符种类**: - 算术:`+ - * / % ++ --` - 关系:`== != > < >= <=` - 逻辑:`&& || !` - 位运算:`& | ^ ~ << >>` - 赋值:`= += -= *= /=` - 其他:`?: (三元运算符), sizeof, ->, .` - **优先级示例(从高到低)**: ```plaintext 1. :: (作用域解析) 2. () [] -> . ++ -- 3. * / % 4. + - 5. << >> 6. < <= > >= 7. == != 8. & ^ | && || 9. ?: 10. = += -= ``` 注:完整列表包含超过20个优先级级别[^3]。 --- #### **2. Java** - **运算符种类**:与C/C++类似,增加`instanceof`类型检查。 - **优先级特点**: - 一元运算符(如`!`、`++`)优先级最高。 - 三元运算符`?:`优先级低于逻辑运算符--- #### **3. Python** - **运算符种类**: - 算术:`** (幂)` - 成员检查:`in, not in` - 身份检查:`is, is not` - **优先级示例**: ```plaintext 1. ** 2. ~ + - (一元运算符) 3. * / % // 4. + - 5. << >> 6. & 7. ^ 8. | 9. 比较运算符(如< >) 10. not 11. and 12. or ``` --- #### **4. JavaScript** - **特殊运算符**: - `===`(严格相等)、`!==` - `typeof`, `delete`, `void` - **优先级特点**: - `typeof`优先级高于算术运算符- 箭头函数`=>`的优先级最低[^1]。 --- #### **5. Go** - **运算符种类**: - 无三元运算符- 位运算包含`&^`(位清除)。 - **优先级规则**: ```plaintext 1. * / % << >> & &^ 2. + - | ^ 3. == != < <= > >= 4. && 5. || ``` 注:Go禁止运算符重载,且整数溢出行为由实现定义。 --- ### **通用原则** 1. **括号优先**:所有语言中`()`均可显式指定优先级。 2. **结合性**:同级运算符按从左到右或从右到左结合(如赋值运算符`=`是右结合)。 3. **语言差异**:幂运算在Python中优先级最高,而在C/C++需调用函数。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值