&&的 和 || 特殊用法 ==和===

本文深入探讨了JavaScript中逻辑运算符的使用方式与特点,包括短路求值的行为,并通过具体的示例展示了各种逻辑运算符的实际效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://jishuziyuan.com/archive/shaenxing2/6341238.html

<script>

if(1 == true){
console.log('1.ture');
}else{
console.log('1.false');
}
if(1===true){
console.log('2.true');
}else{
console.log('2.false');
}
</script>

 

log结果:

1.ture
2.false
 
实例
http://hi.baidu.com/songzongquan/item/67eaa5d8cd48bbf692a9747d
 

console.log(1&&2); //2
console.log(0&&2); //0
console.log(false&&2); //false
console.log(null&&2); //null
console.log('a'&&2); //2   
console.log(1||2); //1
console.log(0||2); //2

 

//下面是一种情况

var a;

console.log(a&&2); //undefined

//下面是一种情况

console.log(a&&2); //报错  因为没有var a

 

转载于:https://www.cnblogs.com/mabelstyle/archive/2013/03/28/2986916.html

#include "app_irtracking.h" #include "motor.h" //巡线探头的处理 static void track_deal_four(u8 *s1,u8 *s2,u8 *s3,u8 *s4,u8 *s5,u8 *s6,u8 *s7,u8 *s8) { *s1 = DL_GPIO_readPins(IR_X_X1_PORT, IR_X_X1_PIN) > 0 ? 1 : 0;; *s2 = DL_GPIO_readPins(IR_X_X2_PORT, IR_X_X2_PIN) > 0 ? 1 : 0;; *s3 = DL_GPIO_readPins(IR_X_X3_PORT, IR_X_X3_PIN) > 0 ? 1 : 0;; *s4 = DL_GPIO_readPins(IR_X_X4_PORT, IR_X_X4_PIN) > 0 ? 1 : 0;; *s5 = DL_GPIO_readPins(IR_X_X5_PORT, IR_X_X5_PIN) > 0 ? 1 : 0;; *s6 = DL_GPIO_readPins(IR_X_X6_PORT, IR_X_X6_PIN) > 0 ? 1 : 0;; *s7 = DL_GPIO_readPins(IR_X_X7_PORT, IR_X_X7_PIN) > 0 ? 1 : 0;; *s8 = DL_GPIO_readPins(IR_X_X8_PORT, IR_X_X8_PIN) > 0 ? 1 : 0;; } /*************************PID*用PID进行巡黑线********************************/ //pid_t pid_IRR; ////增量PID //#define IRR_PID_KP (0) //这可能是接近最好的参数 //#define IRR_PID_KI (0) //#define IRR_PID_KD (0)//kp固定情况下 不能往上调 //#define IRTrack_Trun_KP (250) //350 490 250 //#define IRTrack_Trun_KI (0) //#define IRTrack_Trun_KD (1) //int pid_output_IRR = 0; //#define IRR_SPEED 400 //巡线速度 //#define IRTrack_Minddle 0 //中间的值 //float APP_ELE_PID_Calc(int8_t actual_value) //{ // float IRTrackTurn = 0; // int8_t error; // static int8_t error_last=0; // static float IRTrack_Integral;//积分 // // error=actual_value-IRTrack_Minddle; // // IRTrack_Integral +=error; // // // //位置式pid // IRTrackTurn=error*IRTrack_Trun_KP // +IRTrack_Trun_KI*IRTrack_Integral // +(error - error_last)*IRTrack_Trun_KD; // return IRTrackTurn; //} //u8 trun_flag = 0; //0:没过了 1:过了 //x1-x8 从左往右数 void LineWalking(void) { static u8 x1,x2,x3,x4,x5,x6,x7,x8; track_deal_four(&x1,&x2,&x3,&x4,&x5,&x6,&x7,&x8); //debug // static char bufbuf[30]={'\0'}; // sprintf(bufbuf,"%d\t %d\t %d\t %d\t %d\t %d\t %d\t %d\t \r\n",x1,x2,x3,x4,x5,x6,x7,x8); // uart0_send_string((char*)bufbuf); //优先判断 // if(x1 == 1 && x2 == 1 &&x3 == 0 && x4 == 0 && x5 == 0 && x6 == 0 && x7 == 1 && x8 == 1 ) //过锐角 // { // Set_PWM(3500,2000); // } // else if(x1 == 1 && x2 == 1 &&x3 == 1 && x4 == 1 && x5 == 1 && x6 == 1 && x7 == 1 && x8 == 1 ) //过锐角 // { // Set_PWM(3500,2000); //// if(trun_flag == 0) //出线了 // { // Set_PWM(3500,2000); //// err = 15; //// trun_flag = 1; //// } // //其它情况保持上个状态 // } // // else if(x1 == 0 && x2 == 0 && x7 == 0 && x8 == 0 ) //俩边都亮,直跑 // { // err = 0; //// if(trun_flag == 1) // //// trun_flag = 0;//走到圈了 // // } // // //优先判断 // else if(x1 == 0 && x3 == 0 && x4 == 0 && x5 == 0 && x8 == 0 ) // { // err = 0; // } // //添加直角 // else if((x1 == 0 || x2 == 0 ) && x8 == 1) // { // Set_PWM(2000,4000); // } // //添加直角 // else if((x7 == 0 || x8 == 0) && x1 == 1) // { // Set_PWM(4000,2000); // } /***********左转************/ if (x1 == 1 && x2 == 1 && x3 == 1&& x4 == 0 && x5 == 1 && x6 == 1 && x7 == 1 && x8 == 1) // 1110 1111 { Set_PWM(2000,2200); } else if(x1 == 1 && x2 == 1 && x3 == 0&& x4 == 0 && x5 == 1 && x6 == 1 && x7 == 1 && x8 == 1) // 1100 1111 { Set_PWM(2000,2500); } else if(x1 == 1 && x2 == 1 && x3 == 0&& x4 == 1 && x5 == 1 && x6 == 1 && x7 == 1 && x8 == 1) // 1101 1111 { Set_PWM(2000,2500); } else if(x1 == 1 && x2 == 0 && x3 == 1&& x4 == 1 && x5 == 1 && x6 == 1 && x7 == 1 && x8 == 1) // 1011 1111 { Set_PWM(2000,3000); } else if(x1 == 1 && x2 == 0 && x3 == 0&& x4 == 1 && x5 == 1 && x6 == 1 && x7 == 1 && x8 == 1) // 1001 1111 { Set_PWM(2000,3000); } else if(x1 == 0 && x2 == 0 && x3 == 1&& x4 == 1 && x5 == 1 && x6 == 1 && x7 == 1 && x8 == 1) // 0011 1111 { Set_PWM(2000,3300); //注释,当成直角处理 } else if(x1 == 0 && x2 == 1 && x3 == 1&& x4 == 1 && x5 == 1 && x6 == 1 && x7 == 1 && x8 == 1) // 0111 1111 { Set_PWM(2000,3300); //注释,当成直角处理 } /***********右转************/ else if(x1 == 1 && x2 == 1 && x3 == 1&& x4 == 1 && x5 == 0 && x6 == 1 && x7 == 1 && x8 == 1) // 1111 0111 { Set_PWM(2200,2000); } else if(x1 == 1 && x2 == 1 && x3 == 1&& x4 == 1 && x5 == 0 && x6 == 0 && x7 == 1 && x8 == 1) // 1111 0011 { Set_PWM(2500,2000); } else if(x1 == 1 && x2 == 1 && x3 == 1&& x4 == 1 && x5 == 1 && x6 == 0 && x7 == 1 && x8 == 1) // 1111 1011 { Set_PWM(2500,2000); } else if(x1 == 1 && x2 == 1 && x3 == 1&& x4 == 1 && x5 == 1 && x6 == 0 && x7 == 0 && x8 == 1) // 1111 1001 { Set_PWM(3000,2000); } else if(x1 == 1 && x2 == 1 && x3 == 1&& x4 == 1 && x5 == 1 && x6 == 1 && x7 == 0 && x8 == 1) // 1111 1101 { Set_PWM(3000,2000); } else if(x1 == 1 && x2 == 1 && x3 == 1&& x4 == 1 && x5 == 1 && x6 == 1 && x7 == 0 && x8 == 0) // 1111 1100 { Set_PWM(3300,2000); ///当成直角处理 } else if(x1 == 1 && x2 == 1 && x3 == 1&& x4 == 1 && x5 == 1 && x6 == 1 && x7 == 1 && x8 == 0) // 1111 1110 { Set_PWM(3300,2000);//当成直角处理 } else if(x1 == 1 &&x2 == 1 &&x3 == 1 && x4 == 0 && x5 == 0 && x6 == 1 && x7 == 1&& x8 == 1) //直走 { Set_PWM(3000,3000); } } 帮我分析上述代码
最新发布
07-27
03-14
<think>好的,用户想了解|=&=运算符在编程中的用法区别。首先,我需要确认这两个运算符的基本定义常见用途。记得在编程中,&=|=通常用于位运算逻辑运算,但具体行为可能因语言而异。 首先,我应该回顾一下位运算符的基本知识。在C、C++、Java、JavaScript等语言中,&=是按位与赋值运算符,|=是按位或赋值运算符。它们的作用是对变量进行位操作后赋值。例如,a &= b相当于a = a & b,同样,a |= b就是a = a | b。 接下来,用户可能想知道它们与逻辑运算符&&=||=的区别。不过,在大多数语言中,并没有&&=||=这样的运算符,逻辑赋值通常是通过组合使用,比如a = a && b或者更简洁的a &&= b(某些语言如Ruby支持,但C家族语言通常不支持)。所以需要澄清这一点,避免混淆。 然后,应该考虑它们的实际应用场景。比如,位操作常用于处理标志位或掩码。例如,用|=来设置某个位,用&=来清除位。这时候可能需要举例说明,比如设置文件权限或者硬件寄存器配置。 还需要注意短路效应的问题。逻辑运算符&&||具有短路行为,但位运算符&|没有。不过当用于条件判断时,比如在if语句中使用&或|,即使作为逻辑条件,它们也不会短路。但作为赋值运算符时,&=|=只是执行位运算并赋值,不会有短路效应。 另外,用户可能混淆了位运算符逻辑运算符。比如,&&是逻辑与,而&是按位与。需要明确区分它们的用途:逻辑运算符用于布尔表达式,返回true或false;位运算符对每一位进行操作,返回一个数值。 还要考虑不同编程语言中的差异。比如,在JavaScript中,位运算符会将操作数转换为32位整数,这可能影响结果。而Python中,整数可以是任意长度,处理方式不同。不过用户的问题没有指定语言,所以需要给出一般性的解释,并提到可能的语言差异。 最后,应该总结两者的区别,强调位操作与逻辑操作的不同,赋值运算符的作用,以及典型应用场景。同时,可能需要提醒用户注意运算符优先级的问题,虽然这可能超出当前问题的范围,但了解有助于避免错误。 现在需要检查是否有遗漏点,比如复合赋值运算符的执行顺序,或者特殊用例。例如,a |= b实际上
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值