{} + [] 和 [] + {}的结果

题目

js如果执行以下两个条语句:

[] + {}
{} + []

结果会是什么,为什么?

结果

[] + {} // '[object Object]'
{} + [] // 0

[] + {} 在执行 + 运算时,[] 和 {} 都不是数字、字符串这种原始类型的值,他们自身会先执行.valueOf()方法,如果.valueOf()返回的仍然不是原始类型的值,就会再次执行.toString()方法,最终得到原始类型的值,如果还得不到就会报错。
经过这两个方法的调用后,[]得到了一个 ‘’ 空字符串,{}得到了一个 ‘[object Object]’ 这样的字符串,所以经过拼接后,最终结果就是’[object Object]’

{} + [] 只是调换了下顺序,为什么结果却是0呢,因为开头的 {} ,被js误认为是代码片段的花括号,而不是对象的花括号,所以 {} + []实际执行的是 +[],所以经过转换结果就是0了。如果要得到相同的结果,只需要将这条语句放在括号内,作为表达式执行,({} + []),js就会认为{} 是对象了,结果也是’[object Object]’

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值