一道关于js类型转换的面试题?

if([] == false){console.log('a')}
if({} == false){console.log('b')}
if([] == {}){console.log('c')}
if([]){console.log('d')}

这几道题的隐式转换的方式大神帮忙解答下吧

阅读 2.5k
3 个回答

对象和非对象之间的相等比较

ES5 规范 11.9.3.8-9 做如下规定:

如果 Type(x) 是字符串或数字, Type(y) 是对象,则返回 x == ToPrimitive(y) 的结果;
如果 Type(x) 是对象, Type(y) 是字符串或数字,则返回 ToPromitive(x) == y 的结果。

ToPrimitive就是尝试返回它的原始值,也就是string或者number

因此:

  1. [] == false,[]会先通过valueOf,得到[],不是原始值,再通过toString,得到""
  2. ({}) == false,同上面步骤,最终的到"[object Object]"
  3. 同上,''!="[object Object]"
  4. 没有==,[]默认为true

参考:《你不知道的JS(中)》,强烈建议看看,另外给出一个很坑的[]==![],返回true

[], {} 都会隐式转换成 true

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题