前端判断: []+[], []+{}, {}+[], {}+{}

本质: 二元操作符+规则

一般判断规则:

  1. 如果操作数是对象,则对象会转换为原始值
  2. 如果其中一个操作数是字符串的话,另一个操作数也会转换成字符串,进行字符串拼接
  3. 否则,两个操作数都将转换成数字或NaN,进行加法操作

转为原始数据类型的值的方法:

  1. Symbol.ToPrimitive
  2. Object.prototype.valueOf
  3. Object.prototype.toString

一. []的原值

  1. typeof [][Symbol.ToPrimitive] // undefined
  2. [].valueOf() // []
  3. [].toString() // ‘’

所以[] + [] 就相当于 ''+'', 得到的是空字符串''

二.{}的原始值

  1. typeof {}[Symbol.ToPrimitive] // undefined
  2. ({}).valueOf() // {}
  3. ({}).toString()  // '[object Object]'

注意事项: {}+xx需要看成{};+xx才是得到和控制台一样的值

比如:

({} + []) 相当于是'[object Object]' + '', 得到的是'[object Object]'

{} + [] 相当于{}; + [], 分号说明语句结束了,所以要往后看,而+号本身有隐式转换数字的功能, 所以+[]等于0

同理:

({} + {})是'[object Object][object Object]'

而{} + {}相当于{}; + {},相当于只需要看+{}, {}的原始值是'[object Object]',隐式转换'[object Object]'为数字,'[object Object]'无法转换为正常数字,所以变成NaN

因此:

[] + ???就相当于([] + ???)

而{}的+运算特殊一些:

{} + ??? 相当于 +???转换为数字, 得到数字或者NaN

({} + ???) 相当于分别得到{}的原始值和???的原始值, 即('[object Object]' +???的原始值)

综上所述:

[]+[] =>得到 ''

[]+{} =>得到 '[object Object]'

{} + [] =>得到 0

{} + {} => 得到NaN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值