javascript valueOf方法

如果将对象用于Javascript的关系比较运算符,比如<<=,javascript会首先调用对象的valueOf方法,如果这个方法返回一个原始值,则直接比较原始值。定义一个类Person

function person(age,name){
    this.age=age;
    this.valueOf=function(){
        return this.age;
    }
}

然后新建两个Person的实例。

var person1=new person(12,'张三');
var person2=new person(13,'李四');
console.log(person1<person2) //true
console.log(person1>person2)//false

如果构造函数没有valueOf方法,以上对象无轮如何比较都是输出false
此外在对两个对象求和的话,也会尝试调用valueOf方法

比如
var person1=new person(12,’张三’);
var person2=new person(13,’李四’);
console.log(person1+person2) //25

当然如果构造函数没有valueOf方法,则会对象会先自动调用的toString方法。。默认情况下对象使用的是Object的toString方法的话则输出[object Object];我们也可以重写toString方法。

function person(age,name){
    this.age=age;
    this.name=name;
    this.toString=function(){
        return this.name;
    }
}

var person1=new person(12,'张三');
var person2=new person(13,'李四');
console.log(person1+person2);//张三李四。

如果一个构造函数中同时重写了valueOf和toString的话则只调用valueOf返回的结果参与运算.如下

function person(age,name){
    this.age=age;
    this.valueOf=function(){
        return this.age;
    }
    this.toString=function(){
        return this.name;
    }
}

var person1=new person(12,'张三');
var person2=new person(13,'李四');
console.log(person1+person2);//25