valueOf() 和 toString()
2019-08-06 本文已影响0人
撑船的摆渡人
对象在转换基本类型时,首先会调用 valueOf 然后调用 toString。并且这两个方法你是可以重写的。
valueOf
- 解释:返回指定对象的原始值。
- 当对象需要原始值的时候,JavaScript会自动调用它。
不同类型对象的valueOf()方法的返回值
(1)Array 返回数组对象本身。
(2)Boolean 布尔值。
(3)Date 存储的时间是从 1970 年 1 月 1 日午夜开始计的毫秒数 UTC。
(4)Function 函数本身。
(5)Number 数字值。
(6)Object 对象本身。
(7)String 字符串值。
(8)Math 和 Error 对象没有 valueOf 方法。
image
toString()
1.每个Object对象都包含该方法。
2.当Object对象以字符串方式引用时会被自动调用,注意,是Object对象。
3.默认调用时返回[object type]。
var o = new Object();
o.toString();
控制台返回结果:"[object Object]"
4.可以使用toString()检测对象类型
var a="dd";
toString.call(a);//需要通过apply或者call方式调用
"[object String]"
image
Object.prototype.toString()可以识别标准类型及内置对象类型
console.log(Object.prototype.toString.call("haolucky"));//[object String]
console.log(Object.prototype.toString.call(888));//[object Number]
console.log(Object.prototype.toString.call(true));//[object Boolean]
console.log(Object.prototype.toString.call(undefined));//[object Undefined]
console.log(Object.prototype.toString.call(null));//[object Null]
console.log(Object.prototype.toString.call({name: "haolucky"}));//[object Object]
console.log(Object.prototype.toString.call(function(){}));//[object Function]
console.log(Object.prototype.toString.call([]));//[object Array]
console.log(Object.prototype.toString.call(new Date));//[object Date]
console.log(Object.prototype.toString.call(/\d/));//[object RegExp]
总结
- null、undefined 没有valueOf 和 toString 方法
- toString()和valueOf()的主要不同点在于,toString()返回的是字符串,而valueOf()返回的是原对象
- 使用toString()方法可以区分内置函数和自定义函数