你真的了解js中的加法吗?


这张图是了js中加法运算的规则,遇到加法运算问题按照这张图可以很轻易的得出结果。下面举出一例子

null+undefined = NaN

首先null和undefined都是原始类型,没有字符串,所以把加好两端都转为数字,null转为数字为0,undefined转为数字为NaN,所以最后变成了0+NaN 做加法运算 只要有一端为NaN 结果则为NaN。

NaN+‘1’ = ‘NaN1’
首先+两端都为原始类型,有字符串,则都转为字符串,NaN转为字符串’NaN’ 所以最后变成了 ‘NaN’+‘1’ 拼接字符串为 '‘NaN1’ 。

1+true = 0
首先+两端都为原始类型,没有字符串,则都转为数字类型,ture转数字类型为1,所以最后变成了1+1 加法运算为2。

[1]+1 = ‘11’
左端为数组,是引用类型,则调用数组的valueOf方法,得到的还是一个数组,不能转为原始类型,则调用toString方法,转为了字符串’1’,相当于 ‘1’+1,两端都为原始类型,有字符串,则都转为字符串,所以最后变成了 ‘1’+ ‘1’,字符串拼接’11’

[1].valueOf() //[1]
[1].toString() // '1'

[1,2]+{n:1} =‘1,2[object Object]’
左端为数组,是引用类型,则调用数组的valueOf方法,得到的还是一个数组,不能转为原始类型,则调用toString方法,转为了字符串’1,2’,右端为对象,是引用类型,则调用数组的valueOf方法,得到的还是一个对象,
则调用toString方法,得到的为字符串 ‘[object Object]’,等式最后变为了’1,2’+ ‘[object Object]’ ,拼接字符串为’1,2[object Object]’

[1,2].valueOf() //[1,2]
[1,2].toString() // '1,2'
({n:1}).valueOf() //{n:1}
({n:1}).toString() // '[object Object]'

function f (){return this}
f+1 = ‘function f (){return this}1’

左端为函数,为引用类型,调用valueOf(),得到的还是这个函数,调用f.toString(),得到的是字符串’function f (){return this}‘,所以等式为’function f (){return this}’+1,有一端为字符串则为字符串拼接,结果为’function f (){return this}1’。

function f (){return this}
console.log(f.valueOf()) //ƒ f (){return this};
console.log(f.toString()) // function f (){return this};
console.log(f+1);```

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值