JS加法运算原理

在这里插入图片描述

代码解释如下:
console.log(1 + 1) // 2, 走了第一条通道
console.log(1 + null) // 1, 走了第一条通道,因为Number(null)为0
console.log(1 + undefined) // NaN, 走了第一条通道,因为Number(undefined)为NaN
console.log(1 + '1') // '11', 走了第二条通道
console.log('1'+ undefined) // '1undefined', 走了第二条通道
console.log('1'+ null) // '1null', 走了第二条通道
console.log([1,2] + 1) // '1,21', 走了第三条通道,因为[1,2].valueOf()值还是[1,2],不为原始类型,[1,2].toString()的值为'1,2',然后进行拼接结果为'1,21'
console.log([1,2] + {a:3}) // '1,2[object Object]', 走了第三条通道,因为({a:3}).valueOf()值还是{a:3},不为原始类型,({a:3}).toString()的值为'[object Object]',然后进行拼接结果为'1,2[object Object]'
// 特别说明一下第三条通道,因为下面相加的包含对象类型,故对象类型先调用valueOf方法,
// 在定义对象时,自己写的valueOf方法进行覆盖,故返回1,因此2 === 1 + 1为true,其他同理
 const obj1 = {
    valueOf: function () {
      return 1;
    }
 };
 const obj2 = {
    toString: function () {
      return 2;
    }
 };
 const obj3 = {
 	valueOf: function () {
      return 1;
    },
    toString: function () {
      return 2;
    }
 };
 console.warn('是否相等', 2 === 1 + obj1); // true
 console.warn('是否相等', 3 === 1 + obj2); // true
 console.warn('是否相等', 3 === 1 + obj2); // false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值