[] == ![]涉及的运算符及类型转换

[] == ![];
// true

一个简单的运算,一共涉及了:运算符优先级,boolean类型的转换,相等运算符的比较逻辑,数值的转换逻辑所以还是蛮经典的

  1. 圆括号()
  2. 成员访问.
  3. 后置递增|后置递减++|--
  4. 逻辑非,一元加,一元减,前置递增,前置递减
  5. 乘法,除法,取模
  6. 加法,减法
  7. 大于,大于等于,小于,小于等于
  8. 等号,非等号,全等
  9. 逻辑与... && ...
  10. 逻辑或... || ...
  11. 条件运算法... ? ... : ...
  12. 赋值=

首先,是根据运算符优先级来确定运算顺序。根据上面列出的常用运算符的优先级,可得出会先运算等号左边的。

  1. 只有null, undefined,""(空字符串),0NaN转化为false(这些类型叫假值)。所以[]转化为true
  2. !逻辑非操作符首先会将它的操作数转换为一个布尔值,然后再对其取反
  3. !!两个逻辑非,作用域Boolean()转型函数行为相同
  4. &&如果左侧为真值,则返回右侧值.如果左侧为假值,则返回左侧的值
  5. ||如果左侧为真值,则返回左侧值.否则返回右侧值

逻辑非会先把变量转化为boolean值,再对他做非运算。所以这里考查,boolean类型的转换,根据上面所以最终会把![]转化为false

  1. 如果两个操作数类型相同,用严格比较,
  2. 如果一个是null,另一个是undefined。则相等
  3. 如果一个是数字,另一个是字符串。则把字符串转化为数字,然后比较
  4. 如果一个是boolean值。则先将其转为数字。true1false0
  5. 如果一个是Object,另一个是数字或字符串。则让把Object转化为原始值,再比较。JS先尝试用valueOf()转化。再尝试用toString()转化。再比较([].toString''(空字符串),空字符再变为0。所以[]==''==0; ![] == !true == false == 0(boolean值先转为数字)

所以会先把false转换为数字类型的0。然后再把[]使用toString()把[]转为''

  1. Booean值,true1,false0
  2. null,返回0
  3. undefined,返回NaN
  4. 对象,先调用ValueOf(),如果是NaN,再调用toString()
  5. 字符串

  • 只包含数字(浮点字符)(包括以正负号开头),则转化为10进制数值(浮点数值)。数字后有其他字符都不行!
  • 只包含有效的十六进制格式,被转化为16进制
  • 空字符串,返回0
  • 其他,都返回NaN

最终会把[]转化为0,所以0 == 0





  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值