美文网首页
【JavaScript】Object.prototype.toS

【JavaScript】Object.prototype.toS

作者: level | 来源:发表于2018-11-28 14:28 被阅读0次

typeof可以判断数据类型,为什么要使用Object.prototype.toString?

使用typeof只能判断基本数据类型Number、String、Boolean、Undefined、复杂数据Object,但是Null、RegExp、Date、引用类型Array、Function都返回Object;

可以使用对象的原生扩展函数Object.prototype.toString判断对象的内置类型,输出格式[object 对象数据类型],如果要得到数据类型值可以使用slice截取,Object.prototype.toString.call(对象).slice( 8, -1);

也可以写成toString.call(对象).slice( 8, -1) ,对象都继承自Object,所以对象调用一个方法时会先在该对象上进行查找如果没找,则会一层一层查找原型、原型的原型、Object.prototype,toString.call()实际是调用了Object.prototype.toString。

数值:返回[object Number]。
字符串:返回[object String]。
布尔值:返回[object Boolean]。
undefined:返回[object Undefined]。
null:返回[object Null]。
数组:返回[object Array]。
arguments 对象:返回[object Arguments]。
函数:返回[object Function]。
Error 对象:返回[object Error]。
Date 对象:返回[object Date]。
RegExp 对象:返回[object RegExp]。
其他对象:返回[object Object]。

探究下为什么要使用Object.prototype.toString来获取数据类型?
toString() 方法返回该对象的字符串,语法Object.toString(),每个对象都有一个toString()方法。

var obj = {
  id: 1
};
obj.toString(); //输出"[object Object]"

为什么会输出数据类型,因为自定义obj是继承Object的toString()方法。

var obj = [1, 2];
obj.toString(); //输出"1,2"

为什么数组会输出转换为字符串的值,因为它调用的是Array.prototype的toString()方法,但Array.prototype的toString()方法被重写了。

大部分对象都重写了toString()方法:

对象 输出
Array 元素转换为字符串,两个元素之间用英文逗号分隔
Date 返回日期时间
String 返回对象的字符串值
Number 返回对象的字符串值,可以返回进制的字符串
Boolean 返回对象的字符串值,true返回"true",false返回"false"
... ...

提示:Object.prototype.toString()是可以重写的,使用这个方法判断数据类型,前提是此方法未被重写。

相关文章

网友评论

      本文标题:【JavaScript】Object.prototype.toS

      本文链接:https://www.haomeiwen.com/subject/ordjqqtx.html