javascript的一些数据转换

本文详细解析了JavaScript中加法运算符在处理不同类型数据时的隐性转换机制,包括对null、数组和自定义对象的处理。通过实例展示了如何通过valueOf和toString方法获取对象的原始值,以及这一过程在实际运算中的应用。
加法转换
 1+null     // 1 null转换成0
 1+[]       // "1"  注意是字符串啦
 1+[9]      //  "19"  字符
复制代码

为什么会产生如上? 这里就要了解 对象不是应该报错的吗?哥们这可是js语言啊(一个很随便的语言)。 因为:
会隐性转换取取原始值,与原始值相关的的2个函数toString()valueOf()。对象参与运算时 回去 执行obj.valueOf()方法拿到原始值 没有返回对象本身 如果返回的 不是个原始值 则会执行 obj.toString()这就可以解释 1+[9] 位 "19"

  [9].valueOf()                    //返回对象本身 执行toString
 [9].toString()                   //"9"
 1 + "9"                          //"19"
复制代码
咱自定义对象来验证
var obj ={ 
    flag:false,
    toString:function(){
     return this.flag?"先调用了valueOf":"直接调用哥们" ;
    },
    valueOf:function(){
      this.flag=true;
      return  [1,2,3,4,5] ;       //注意我返回的是一个 *数组对象* 不是原始值
    }

}

console.log(1+obj)                //'1先调用了valueOf'

//我们再来总结一下 obj先调valueOf  如果不是原始值 则调toString

var obj={valueOf:function(){return 12;}}
   
   1<obj                           //true
复制代码
其他js等效运算
 !!x                              // 等价    Boolean(x)
 -x                               // 等价    Number(x)
 x + ""                           //等价     String(x)
 x!==x                            // 等价    isNaN(x)
 +x                               // 等价   Number(x)
复制代码

转载于:https://juejin.im/post/5cb9319cf265da038557f3d3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值