tostring和valueof的理解和区别

**

1.valueOf

**

// 返回对象的值,默认情况下返回对象本身
var obj = new Object()
  
console.log(obj.valueOf());//返回Object
console.log(obj.valueOf()===obj);//返回true

//重写valueOf
obj.valueOf = function(){
	return 2;
}

console.log(1+obj); //返回3

**

2.toString

**

var a={a:1}
// 返回对象的字符串形式,默认情况下返回类型字符串 
console.log(a.toString());//返回[object Object]
console.log(a.toString() === a);//返回false

//重写toString
a.toString=function(){
	return 'wo'
}
console.log(a.toString())//返回wo

//数组调用toString,返回由数组中每个值的字符串形式拼接而成的一个以逗号分割的字符串
var arr = [1,2,3];
console.log(arr.toString());//返回1,2,3

//函数调用toString
console.log((function(){
	return 'wo'
}).toString());  //输出表达式function(){return 'wo'}


//日期类型调用toString
console.log(new Date().toString());//返回当前时间的描述Sun Jun 14 2020 12:45:14 GMT+0800 (中国标准时间)

**

toString Vs valueOf

**

在js中不同类型的数据可以互相进行比较运算。而在这个运算过程中,就需要使用toString和valueOf对数据进行处理。
调用规则
1、如果定义了valueOf,并且valueOf返回一个原始数据类型,大多数情况下优先调用valueOf

let obj={
	a:1
}
obj.toString=()=>10
obj.valueOf=()=>100

console.log(1+obj);//101
console.log('hello'+obj);//hello100
console.log(+obj)//100

2、如果不定义valueOf(或者valueOf返回的不是原始数据类型),并且定义了toString(且toString返回一个原始数据类型),调用toString

let obj={
		a:1
	}
	obj.toString=()=>10
	// obj.valueOf=()=>100

	console.log(1+obj);//11
	console.log('hello'+obj);//hello10
	console.log(+obj)//10
let obj={
	a:1
}
obj.toString=()=>10
obj.valueOf=()=>{return {a:1}}

console.log(1+obj);//11
console.log('hello'+obj);//hello10
console.log(+obj)//10

共同点:在 JavaScript 中,toString()方法和valueOf()方法,在输出对象时会自动调用。
不同点:二者并存的情况下,在数值运算中,优先调用了valueOf,字符串运算中,优先调用了toString。

返回值类型的差别: toString vs valueOf的差别:

          1. toString一定将所有内容转为字符串

          2. valueOf取出对象内部的值,不进行类型转换

用途的差别:

          1. valueOf专用于算数计算和关系运算

          2. toString专用于输出字符串

共同的缺点:无法获取null和undefined的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值