[JS] 区分Boolean()与 == 类型转换

区分Boolean()与 == 类型转换

  • if(condition){...}时,condition的值来自于Boolean(condition)的计算,Boolean()它只会在以下6种情况为false:NaN, 0, '' , undefined, null, false,在语法上其余情况再离谱也是true!(然鹅浏览器提供了一个东西叫“假值对象”,Boolean(document.all)会得到false的结果)

  • 在使用A == B进行比较时,由于要同时考虑操作数AB双方的类型,又要最终返回布尔值类型,因此会发生隐式类型转换:

  • ==操作的目的 往往是判断是否等值 因此倾向于转换为Number,如'123' == 123; "" == 0; 1 == true都发生了Number()求值,所以结果均为true;

  • 但是出现nullundefined,则他们只会与null或undefined等值比较得到true;可以理解为 若遇到其它人,他们Number()的结果是NaN 与其他数值比较必然false。

  • 其中操作数如果是object,则会使用obj.toPrimitive()转为值类型,即:先obj.valueOf(),若还不是值类型则再obj.toString()

  • 如:[1].valueOf() => [1]结果还是object,[1].toString() => "[1]"这次是基本类型非空字符串了。而[0].toString()[ ].toString()得到的是"0""",因此会在等值比较中通过Number()求值得到0。

题目:

var a = [0]; if(a) { console.log( a == true ); } else { console.log("this is else"); }
/*if中Boolean(一个数组)的结果为true,会进入第一个分支 等值比较运算 倾向于转为数值,
* a为对象 需要先valueOf(),实际上没效果 还是得到数组,再a.toString()得到非空字符串'0',
* 然后'0'被转值为0 true被转值为1,最终相当于0 == 1,答案是false
* /
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值