- 这两个方法都为对象的原始方法
- valueof为对象的原始值,通常不会显示的调用,通常由Js自动在后台进行调用
- toStrting本身的一个作用是做字符串的转换,也会进行自动调用
- 如果我们重写了这两个方法,在进行运算时,优先调用valueof,在进行显示时,优先调用toString
- 比如我们只量写了一个方法,那么无论是运算还是显示,都会调用该方法
var obj = {
num: 1,
toString: function() {
console.log('调用了toString方法');
return this.num + 2;
},
valueOf: function() {
console.log('调用了valueOF方法');
return this.num++;
},
}
console.log(obj == 2); //两个都重写,优先调用valueOf,返回原值1,然后原值执行valueOf方法加一
console.log(obj == 2);
console.log(obj);
// alert(obj);//值为5,执行了两次valueOf
解析:两个都重写,如注释。
可以通过valueof实现一个累加的实例,每次调用obj时, valueof方法都会被调用
因为num在value0f中被引用,所以不会被垃圾回收机制回收
var obj = {
num: 1,
toString: function() {
return this.num + 100;
},
valueOf: function() {
return this.num++;
}
}
console.log(obj == 1)
console.log(obj == 2)
console.log(obj == 3)
console.log(Number(obj))
运行结果:
当没有重写valueOf方法的时候