(a==1 && a==2 && a==3)输出ture

JavaScript对象比较与类型转换陷阱

(a == 1 && a == 2 && a == 3)输出ture分析:

两个概念:
1.隐式转换
2.Object的toString/valueOf方法

 let a = {
      num: 0,
      toString() { console.log('执行了tosting'); return this.num+=1 },
      valueOf() {  console.log('执行了value'); return this.num+=1 }
    }

对象中同时存在toString和valueOf方法时,JavaScript会优先调用Object.prototype.valueOf(),默认情况下,返回正在被调用的对象。

当遇到比较,js会对其进行类型转化,企图将操作数的类型转化为类似的。
在我们的问题中:(a == 1 && a == 2 && a == 3)JavaScript会企图将对象转化成数字的类型,进行比较。当要转化的是一个Object的时候,JavaScript会优先调用valueOf()方法

下面的代码是干什么用的,请生成说明注释,同时还有什么改进: //10ms void Heating_Control(void) { // PORT_ToggleBit(PORT2,PIN1); // return; A_Heating_Grade=8; if (User.Temp_Gears > 0) //非冷风档 { //无温度保护、电机方向正确、电机部分无故障、热风档、启动后、非冷风模式、电机速度大于设定值 if ((B_Heating_Delay == 0)&&(UC.TempProtectFlag == 0) && (Config.MotorDir == Config_Motor_FR) && (MOTOR_STATE == MC_RUN) && (MOTOR_FAULT_CODE == NOERROR) && (Flag.MC_RunStop == 1) && (UC.LengfengSet == 0) && (Basic.Mech_Speed > Motor_OpenWENDU_Speed) && (UC.FreqDectFinsh == 1) && (UC.DelayOFF == 0)) //暖风、风挡大于0、开机、正转、没有温度保护 { UC.Heating_ture_state = 1; //发热丝可打开状态 } else//关定时器,即不开发热丝 { UC.Heating_ture_state = 0; //发热丝不可打开状态 PTC_CTR1_OFF } if (UC.Heating_ture_state == 1) //发热丝允许打开标志位 { if (UC.ZeroFlag == 1) { if (UC.ZeroSet == 1)//高低过零点 { UC.ZeroSet = 0; if (++Cnt_ZeroTimes >= 16) //16个周期 { Cnt_ZeroTimes = 0; } grade_A = A_Heating_Grade; //丢波数组A dat_A = PowerA_Map[grade_A][Cnt_ZeroTimes]; //当前数组数据 nextTimes_A = Cnt_ZeroTimes + 1; if (nextTimes_A >= 16) { nextTimes_A = 0; } next_dat_A = PowerA_Map[grade_A][nextTimes_A]; //下个数组数据 if (dat_A == 1 || B_Heating_RightNow > 0) { PTC_CTR1_ON //低电平是开发热丝 } else if (dat_A == 0) { PTC_CTR1_OFF //高电平是关发热丝 } } if (UC.ZeroDelay1Count < 40) //过零点后,计算关定时器的时间,般要晚于发热丝的打开段时间 40x1/25=1.6ms { UC.ZeroDelay1Count++; } else { UC.ZeroFlag = 0; UC.ZeroDelay1Count = 0; } } else { // if (next_dat_A == 1)//&& (dat_A == 1)) //下个波不需要丢 // { // PTC_CTR1_ON //打开发热丝 // } // else // { // PTC_CTR1_OFF //高电平是关发热丝 // } } } } else { UC.Heating_ture_state = 0; //发热丝不可打开状态 PTC_CTR1_OFF } } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return new BigInteger(1, digest).toString(16); }】
最新发布
10-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值