toString方法的调用

toString方法的调用

PluginsKers
2021-03-07 / 0 评论 / 238 阅读 / 正在检测是否收录...

toString来源

Object类型的每个实例都有toString()方法,返回对象的字符串表示'[object,Object]',所以每个实例化对象都可以调用toString方法

顺着实例化对象原型链obj=>obj._proto_=>Object.prototype知道toString方法是定义在Object.prototype上的

  • 然而不同类型都或多或少的重写了toString()方法 ,因此不同类型调用toString()方法会产生的值各不相同

不同对象toString方法的返回

对象Object

对象类型的调用toString方法都会返回对象的字符串表示

任何对象都可以通过this绑定调用Object.prototype.toString()方法 返回对象的字符串表示

Object.prototype.toString.call({});
<!--"[object Object]"-->

Object.prototype.toString.call([]);
<!--"[object Array]"-->

Object.prototype.toString.call(function(){});
<!--"[object Function]"-->

Object.prototype.toString.call('');
<!--"[object String]"-->

Object.prototype.toString.call(1);
<!--"[object Number]"-->

Object.prototype.toString.call(true);
<!--"[object Boolean]"-->

Object.prototype.toString.call(null);
<!--"[object Null]"-->

Object.prototype.toString.call(undefined);
<!--"[object Undefined]"-->

Object.prototype.toString.call();
<!--"[object Undefined]"-->

Object.prototype.toString.call(new Date());
<!--"[object Date]"-->

Object.prototype.toString.call(/at/);
<!--"[object RegExp]"-->

数组Array

返回由数组中每个值的字符串形式拼接而成的以逗号分隔的一个字符串

var array = [1, 's', true, {a: 2}];
array.toString();//"1,s,true,[object Object]"
Array.prototype.toString.call(array);//"1,s,true,[object Object]"
  • 以上可以看出数组对象可以通过this绑定调用Array.prototype.toString()方法,返回数组值的字符串拼接
Array.prototype.toString.call({});
<!--"[object Object]"-->
Array.prototype.toString.call(function(){})
<!--"[object Function]"-->
Array.prototype.toString.call(1)
<!--"[object Number]"-->
Array.prototype.toString.call('')
<!--"[object String]"-->
Array.prototype.toString.call(true)
<!--"[object Boolean]"-->
Array.prototype.toString.call(/s/)
<!--"[object RegExp]"-->

Array.prototype.toString.call();
<!--Cannot convert undefined or null to object at toString-->
Array.prototype.toString.call(undefined);
Array.prototype.toString.call(null);
  • 但是非数组对象通过this绑定调用Array.prototype.toString方法,返回的是该对象的字符串表示。
  • 另外nullundefined不可以通过绑定调用Array.prototype.toString方法

函数Function

toString() 返回函数的代码

function foo(){
    console.log('function');
};
foo.toString();
<!--"function foo(){-->
<!--    console.log('function');-->
<!--}"-->


Function.prototype.toString.call(foo);
<!--"function foo(){-->
<!--    console.log('function');-->
<!--}"-->
Object.toString();
//"function Object() { [native code] }"
Function.toString();
//"function Function() { [native code] }"
Array.toString();
//"function Array() { [native code] }"
  • 以上构造函数的toString方法都是返回的函数代码
Function.prototype.toString.call({});
<!--Function.prototype.toString requires that 'this' be a Function-->
  • 非函数对象不能通过绑定this来调用原型方法

日期Date

返回带有时区信息的日期和时间

var date = new Date();
date.toString();
//"Fri Mar 05 2020 16:53:43 GMT+0800 (中国标准时间)"
Date.prototype.toString.call(date);
//"Fri Mar 05 2020 16:53:43 GMT+0800 (中国标准时间)"

正则表达式RegExp

返回正则表达式的字面量

var reg = /cat/g;
reg.toString();// "/cat/g"
RegExp.prototype.toString.call(re);// "/cat/g"

最后

以上是个人在实战和相关学习中总结的,如有错误,敬请指正!表情

24

评论 (0)

取消