- toString() 方法返回一个表示该对象的字符串。
每个对象都有一个 toString() 方法,当对象被表示为文本值时或者当以期望字符串的方式引用对象时,该方法被自动调用。对对象x,toString() 返回 “[object type]”,其中type是对象类型。如果x不是对象,toString() 返回x应有的文本值(不是单纯的加”“)
可以自己定义一个对象的toString()方法来覆盖它原来的方法。这个方法不能含有参数,方法里必须return一个值。
var x = {};
console.log(x.toString());
toString.call(new Date);
toString.call(new String);
toString.call(Math);
toString.call(undefined);
toString.call(null);
var x = [1,2,3];
x.toString();
var x = function(){console.log('lalala')}
x.toString();
var x = 12345;
x.toString();
var a = {};
console.log(a.toString());
a.toString = function() {return "a new toString"};
console.log(a + " hello" );
console.log(a + 1);
- valueOf() 方法返回指定对象的原始值。
JavaScript 调用 valueOf() 方法用来把对象转换成原始类型的值(数值、字符串和布尔值) 默认情况下, valueOf() 会被每个对象Object继承。每一个内置对象都会覆盖这个方法为了返回一个合理的值,如果对象没有原始值,valueOf() 就会返回对象自身。
可以自己定义一个对象的valueOf()方法来覆盖它原来的方法。这个方法不能含有参数,方法里必须return一个值
var x = {};
x.valueOf();
var x = [1,2,3];
x.valueOf();
var x = function(){console.log('lalala')}
x.valueOf();
var x = 12345;
x.valueOf();
var x = {};
x.valueOf = function(){
return 10;
}
console.log(x+1);
console.log(x+"hello");
- 调用规则
1. 如果定义了valueOf,且valueOf返回一个原始值,则优先调用valueOf
2. 如果没有定义valueOf或者valueOf返回的不是原始值,同时定义了toString(且toString返回一个原始数据类型),则调用toString
3. 在 JavaScript 中,toString()方法和valueOf()方法,在输出对象时会自动调用。二者并存的情况下,在数值运算中,优先调用了valueOf,字符串运算中,优先调用了toString。