进阶/ toString()大刀阔斧
故事的开始。。。
源于2019年的一次邂逅 猛戳这里
obj.toString()的结果和Object.prototype.toString.call(obj)的结果不一样,这是为什么?
这是因为toString为Object的原型方法,
而Array 、Function等类型作为Object的实例,都重写了toString方法。
不同的对象类型调用toString方法时,
根据原型链的知识,调用的是对应的重写之后的toString方法(Function类型返回内容为函数体的字符串,Array类型返回元素组成的字符串.....),
而不会去调用Object上原型toString方法(返回对象的具体类型),
所以采用obj.toString()不能得到其对象类型,只能将obj转换为字符串类型;因此,在想要得到对象的具体类型时,应该调用Object上原型toString方法。
var str = 'this is string'; str.toString()
运行结果
"this is string" //转成字符串
继续探索
var str = 'this is string'; toString(str) // "[object Undefined]"
总结:object.toString()只是输出该对象的信息,并以字符表示
但是js提供的内置函数toString()输出的结果为"[object Window]",这和str对象没人任何联系,接下来我只对toString()方法详解。
2.toString()详解
//这段文字意义不明 当调用toString方法时,下列步骤会被执行: 如果this未定义时,返回“[object Undefined]” 如果this为null时,返回“[object Null]” 定义O,并且让O=ToObject(this) 定义class,并且使class为O内置属性[[class]]的值 返回三个字符串的拼接字符:"[object",class,"]" ————————————————
官方解释,可以清晰的得出toString()是在以特殊的字符串形式输出this的类型,不管你传入什么参数,该方法都是执行了window.toString()方法,this一直指向了window对象,所以输出了上述结果。//待验证
3.怎么使用toString()方法判断任意类型
toString()始终判断的是this的类型,那么只要将this指向其他对象,就能判断该对象的类型。
到了这步就比较清楚了,js中改变this有那种方式,一种是call方法,另一种是apply方法,我们可以通过实验看看有没有达到我们想要的结果。
var str = 'this is string'; toString.call(str) //"[object String]"
!!!成功
4.注意的地方
在IE中使用toString.call()方法时会报错,建议使用Object.prototype.toString.call()(所有浏览器都支持),这是js为原始对象原型提供的toString方法,用法和toString方法一样。
本人是一个技术爱好者
1.但是每个技术爱好者都是从萌新开始的
2.我所有的博文都是我各方资料查阅(看的比较乱比较杂,因为有些是群里讨论等等来源,无法辨别出处,所以我的文章都是没有写明出处,都是我个人消化后整理,)
3.但是没有经过我实践的我一般会标注
4.希望大家共同交流共同进步,指出我的不足 谢谢