[] == false 为什么是 True

[] == false 为什么是 True

参考

JS的隐式转换 [] ==false 说起 - 南辰_k - 博客园 (cnblogs.com)

首先很明显,在对比的时候,js 内部进行了隐式类型转换,并且在发生转换的时候,js 其实都是会将操作对象转化为原始的对象。ECMAScript 规范中有一个内部函数, ToPrimitive() (JavaScript中不能访问)能实现这个功能。

ToPrimitive(input, [PreferredType])

input表示要转换的内容, PreferredType 表示转换后的类型,它可以是 NumberString ,具体取决于其结果是希望转换成数字还是字符串。

转换步骤
  1. 如果 input 是原始值,返回这个值(没有其他需要做的)。
  2. 否则,如果 input 是对象,调用 input.valueOf()。 如果结果是原始值,则返回结果。
  3. 否则,调用 input.toString() 。如果结果是原始值,返回结果。
  4. 否则,抛出一个 TypeError (说明将输入转换成原始值出错了)
原始值

undefined, null, booleans, numbers,strings, symbol

// 再来看一下 [] == false
[].valueOf() // [] 不是原始值
[].toString // ''
// '' == false
Number('') == Number(false)
// true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值