object之toString方法深入剖析

obj.toString()的结果和Object.prototype.toString.call(obj)的结果不一样;

这是因为Object本身有toString方法,能返回具体类型。

而Array ,function等类型作为Object的实例,都重写了toString方法。

这些对象类型调用toString方法时,根据原型链的知识,调用的是对应的重写之后的toString方法,而不会去调用Object上原型toString方法。

所以采用obj.toString()不能得到其对象类型,只能将obj转换为字符串类型;因此,在想要得到对象的具体类型时,应该调用Object上原型toString方法。

var toString1=Object.prototype.toString;

var toString2={}.toString;

var bool=true;

var num=2;

var str="";

var fn=function(){};

var arr=[];

var date=new Date();

var reg=new RegExp();

var obj={};

console.log(bool.toString(), toString1.call(bool), toString2.call(bool)); console.log(num.toString(), toString1.call(num), toString2.call(num));

console.log(str.toString(), toString1.call(str), toString2.call(str));

console.log(fn.toString(), toString1.call(fn), toString2.call(fn));

console.log(arr.toString(), toString1.call(arr), toString2.call(arr));

console.log(date.toString(), toString1.call(date), toString2.call(date)); console.log(reg.toString(), toString1.call(reg), toString2.call(reg));

console.log(obj.toString(), toString1.call(obj), toString2.call(obj));

经测试,toString1 和 toString2作用是一样的 说明纯对象{}没有重写toString方法;而其他对象的toString都是重写过的,只是单纯地转换成字符串并返回。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值