空数组+空对象等于什么?数据类型转换问题

本文深入探讨了JavaScript中对象与数组使用+运算符时的行为,解析了valueOf与toString方法在运算中的作用,揭示了复杂数据类型转为字符串的机制。

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

console.log([] + {})

解题思路
这里涉及到 '+'号的运算原理
当两侧都是数字的时候 相加 1 + 1 = 2
当一侧是数字,一侧是字符串 字符串拼接数字 1 + ‘1’ = ‘11’(如果是-号的话会将字符串转换为数字进行减法操作 * / % > < == 也是如此)
两侧都是字符串 拼接字符串 ‘1’ + ‘1’ = ‘11’
上面这些都是原始数据类型的+法操作,下面是复杂数据类型的+法操作
当+号一侧数据类型是对象时,会将对象先进行valueOf操作,如果返回原始数据类型则,按照上面原始数据类型计算,如果返回的值还是对象则再调用toString方法,返回原始数据类型则按照上面原始数据类型计算,否则报错

上面 [] 和 {}都是复杂数据类型,所以在进行 + 操作时先调用它们的valueOf方法,返回的还是它们自身,然后调用toString方法,[]调用toString方法变成’'空字符串,{}.toString() 等于[object object] 这时两侧都是字符串类型,所以对其进行拼接操作 结果就是[object object]

还有几点需要注意的
当 + 号两侧是数字类型和NaN,则结果就是NaN
一般+号遇到对象类型数据 就是将其toString,然后当做字符串操作,比如
NaN + [] => ‘NaN’
NaN虽然叫做不是一个数字,可数据类型确是number类型;NaN和任何number类型数据+ - * /% …操作结果都是 NaN
[]转换成原始数据类型结果是 ''空字符串
NaN + [] => 原始数据类型 + 复杂数据类型 => NaN + ‘’ => ‘NaN’
{}转换成原始数据类型结果是 字符串[object object]

最后如果本文对你有用的话欢迎你关注我的公众号,会有各种技术栈的文章
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值