{}+[]==0,[]+{}=="[object Object]",!+[]==true (复合语句,隐式类型转换)

本文探讨JavaScript中的一些复杂类型转换问题,如`[]+{}=="[object Object]"`,`{}+[] == 0`以及`!+[]==true`。通过解析这些表达式的运算过程,揭示JS中复合语句的运算规则和隐式类型转换的原理。重点讨论了对象到字符串的转换以及在复合语句中的类型转换行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这两天看到一些题目,很是不解,主要是js基础还没过关,挑了两个我认为比较难懂的类型转换的题目讲解一下。
对象类型转换这个就不详细说了,网上一大推,无非就是用到两个函数:

  1. Object.toString()
  2. Object.valueof()

这里说一下,Number,String,Boolean在调用方法的时候也会转换成包装对象。

1、[]+{}=="[object Object]",这个简单
[]+{} //输出"[object Object]"
[].toString() //==> ""
{}.toString() // ==> "[object Object]"
""+"[object Object]" // ==>"[object Object]"
2、{}+[] == 0;这个就有点不解了,其实这个就要说到js的复合语句了,js中{}代表复合语句:
{
    var a = 1;
    a = a+1;
}

这个是一个代码块,也叫复合语句,所以{}+[]其实是这样运算的:

{};
+[]   //   [].toString()  ==>""  (+"") ==>0

这里+[]是一个类型转换,js中+-开头的的变量会被转换成Number类型,不是number类型的会转成NaN,例如:在这里插入图片描述

3、!+[]==true 知道+会把字符串转换成Number类型,那么这个就好理解了

在这里插入图片描述

!+[]
等于:
+[] //  ==>0
!0 // ==>true
!+[]+[] 等于:
!+[] //   ==> true
true + [] // ==>true+""==>"true"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值