js对象中的valueOf()方法和toString()方法非常类似,
当需要返回对象的原始值而非字符串的时候才调用valueOf(),尤其是转换为数字的时候。
如果在需要使用原始值的上下文中使用了对象,JavaScript就会自动调用valueOf()方法。
valueOf()方法是Object的原型方法,每个对象都具有该方法,但是各对象返回的值有一定的区别。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201205184553290.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbmc0NTEwMDcyMjg4,size_16,color_FFFFFF,t_70)
注意number、string、boolean中的基本包装类型的使用。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201205184644215.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbmc0NTEwMDcyMjg4,size_16,color_FFFFFF,t_70)
其实类似于这样
function MyDataType( x){
this.x=x;
}
MyDataType.prototype.valueOf=function(){
return this.x
}
var temp = new MyDataType(1);
var result =temp.valueOf()
1
typeOf result number
toString()
每一个继承 Object 的对象都有 toString 方法,如果 toString 方法没有重写的话,会返回 ‘[Object type]’,其中 type 为对象的类型。但当除了 Object 类型的对象外,其他类型直接使用 toString 方法时,会直接返回都是内容的字符串
应用:
可以通过 toString() 来获取每个对象的类型。为了每个对象都能通过 Object.prototype.toString() 来检测。
来一个测试你是否理解上面的话的意思
我们试图将一个对象设置为对象a的键,其值为123,这时对象键自动转换为字符串。
但是,当对象自动转换为字符串化时,它变成了[Object object]。 所以我们在这里说的是a[“Object object”] = 123。 然后,我们可以尝试再次做同样的事情。 c对象同样会发生隐式类型转换。那么,a[“Object object”] = 456。
然后,我们打印a[b],它实际上是a[“Object object”]。 我们将其设置为456,因此返回456。