美文网首页
toString()方法判断数据类型的原理

toString()方法判断数据类型的原理

作者: 扶得一人醉如苏沐晨 | 来源:发表于2023-10-26 08:57 被阅读0次

一、toString()

toString()方法返回一个表示该对象的字符串。

描述

Object.prototype.toString()可以看出toString()继承自Object

默认情况下,toString() 方法被每个 Object 对象继承

当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。

二、Object.prototype.toString()方法判断数据类型的原理

如果toString() 方法在自定义对象中未被覆盖,toString()返回 [object type],其中 type 是对象的类型。

2.1. toString方法没有被覆盖的情况

例如Object,Math他们直接调用toStirng()方法,可以直接判断出来数据类型
obj.toString(); // "[object Object]"
Math.toString(); // "[object Math]"

2.2. toString方法被覆盖的情况

Number、Boolean、String、Array、Date、RegExp、Function这几种构造函数生成的对象,toString方法都被覆盖了,所以他们无法使用toString()方法获取数据类型
Boolean.prototype.hasOwnProperty("toString"); // true
String.prototype.hasOwnProperty("toString"); // true
Array.prototype.hasOwnProperty("toString"); // true
Date.prototype.hasOwnProperty("toString"); // true
RegExp.prototype.hasOwnProperty("toString"); // true
Function.prototype.hasOwnProperty("toString"); // true
var num = new Number("123sd");
num.toString(); // 'NaN'
var str = new String("12df");
str.toString(); // '12df'
var bool = new Boolean("fd");
bool.toString(); // 'true'
var arr = new Array(1, 2);
arr.toString(); // '1,2'
var d = new Date();
d.toString(); // "Sun Jul 22 2018 12:38:42 GMT+0800 (中国标准时间)"
var func = function () {};
func.toString(); // "function () {}"

其他(例如Object,Math)都是返回该对象的类型。

使用 toString() 检测对象类型

可以通过 toString() 来获取每个对象的类型。

为了每个对象都能通过 Object.prototype.toString() 来检测

需要以 Function.prototype.call() 或者 Function.prototype.apply() 的形式来调用,传递要检查的对象作为第一个参数。

var toString = Object.prototype.toString;

toString.call(new Date()); // [object Date]
toString.call(new String()); // [object String]
toString.call(Math); // [object Math]

//Since JavaScript 1.8.5
toString.call(undefined); // [object Undefined]
toString.call(null); // [object Null]

相关文章

网友评论

      本文标题:toString()方法判断数据类型的原理

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