valueOf()和toString()详解

    // 对象在参与运算及比较的时候,js引擎会自动的帮我们去调用这两个方法.
    
    // 调用规则:
    //  1. 默认先调用valueOf方法(valueOf 来源于 Object的原型),尝试把对象转成简单数据类型,
        2. 如果没有得到简单数据类型,再继续去调用toString方法
    //  作用: 将对象转成原始值(简单数据类型),但是Object原型上的valueOf达不到目的, 把对象自身给返回了

    /*  var arr = [1,2,3];
        console.log(arr + 1); // 1,2,31
    //  arr.valueOf()  ==> arr
    //  arr.toString() ==> "1,2,3"
    //  "1,2,3" + 1    ==> "1,2,31"
    
    console.log(arr - 0); // NaN  
    // "1,2,3" - 0
    console.log(arr + "6班学习好努力"); // 1,2,36班学习好努力*/

    // var obj = {
    //     name: "lw"
    // };
    // console.log(obj * 1);  // NaN 
    // obj.valueOf() ==> obj
    // obj.toString() ==> "[object Object]"
    // "[object Object]" * 1
    // console.log(obj + "1");  // [object Object]1

    // console.log([] == ![]);  // true
    //  [] == false  ==> 都转数值进行比较
    //  [].valueOf() ==> []
    //  [].toString()  ==> ""
    //  +""  ==> 0

    //  console.log({} == !{});
    // {} == false   ==> 都转数值进行比较
    // {}.valueOf()  ==> {}
    // {}.toString() ==> "[object Object]"
    // +"[object Object]" ==> NaN (字符串转成数值 ===>  NaN, 不是一个数字)
    
    例1:
        // var obj = {};
        // console.log(obj.toString()); // "[objectObject]"
    例2:
        // var a = {},
        // b = { key: 'b' };
        // c = { key: 'c' };
        // a[b] = 123;
        // a[c] = 456;
        // console.log(a[b]);   //456
    
    // 给如果对象的属性类型不是一个字符串时,就会去转换.
        // js会自动让对象去调用这两个方法,默认先valueOf(),如果没有得到简单数据类型,再去调用toString()
        // 其中对象a中的属性 b ==> "[object,Object]" ,等同于 给对象a,使用[]语法,去添加属性并赋值
        // 再看对象a中的属性 c ==> "[object,Object]" ,等同于 修改同一个属性的属性值,所以最终的到的结果是456复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值