美文网首页
关于JS对象的toString()方法

关于JS对象的toString()方法

作者: 明里人 | 来源:发表于2019-08-20 11:48 被阅读0次

借鉴与老师写的一篇文章,原文地址:https://www.jianshu.com/p/25001441ffba

变量a在什么情况下会满足这三个条件,打印出1?
var a = ?
if (a == 1 && a == 2 && a == 3) {
    console.log(1);
}
解题:
var a = {
    i: 1,
    toString: function() {
        return a.i ++;
    }
}
if (a == 1 && a == 2 && a == 3) {
    console.log(1);
}
思路:

1、JavaScript对象在与 字符串拼接或者比较 时,首先会通过valueOf()方法获取其原始值。原始值就是其本身。

var a = {};
console.log(a.valueOf()); // {}
console.log(a === a.valueOf()); // true

2、如果valueOf值为对象,则会去调用对象的toString()方法。若该对象内部没有重写实现该方法,会调用对象共有的toString()方法,返回"[object Object]"。

var a = {};
console.log(a.toString()); // [object Object]  类型为string
console.log(a.toString() + 1); // [object Object]1   返回结果为字符串,拼接1
console.log(a + 1 === a.toString() + 1); // true;

3、如果对象下有重写toString()方法,会执行该方法:

var a = {
    toString() {
        return 1;
    }
}
console.log(a.toString()); // 1
console.log(a.toString() - 1); // 0
console.log(a - 1 === a.toString() - 1); // true  进行比较对象a会执行valueOf()和toString()方法。

4、以上可以看出对象每进行一次比较或拼接都会执行toString()方法。

var num =1;
var a = {
    toString(){
        return ++num;
    }
};
console.log(a + "");// 2
console.log(a + "");// 3
console.log(a + 1);// 5
console.log(a == 5);// true

5、最终实现结果:

// 使用 toString 实现:
var a = {
    i: 1,
    toString: function() {
        return a.i ++;
    }
}
// a == 1 比较时,a对象会调用toString()方法,返回结果与1进行比较。
if (a == 1 && a == 2 && a == 3) {
    console.log(1);
}

// 使用 valueOf 实现:
let a = {
    i: 0,
    valueOf: function() {
        return ++ a.i;
    }
}
        
if (a == '1' && a == '2' && a == '3') {
    console.log(typeof obj); // object
}

注意:不论是 toString 方法或者是 valueOf 方法实现, 都不可以使用全等去判断a,因为此时a的类型为对象。

相关文章

网友评论

      本文标题:关于JS对象的toString()方法

      本文链接:https://www.haomeiwen.com/subject/dbiusctx.html