首页 > 代码库 > javascript的toString深入探究
javascript的toString深入探究
toString()方法是所有对象都有的一个方法,无论是字符串,数组,对象,都可以调用这个方法,但是,事实上,他们调用的并不是同一个函数哦! 看下面的代码:
var str = ‘123‘;console.log(Object.prototype.toString===str.toString); //false
console.log(String.prototype.toString===str.toString); //true
console.log(Object.prototype.toString.call(str)); //‘[object String]‘console.log(str.toString()); //‘123‘
可以看到,这里的str.toString是调用了String.protype.toString方法,而不是Object.prototype.toString方法
再看下面这段代码:
var arr = [1,2,3];console.log(Object.prototype.toString===arr.toString); //false
console.log(Array.prototype.toString===arr.toString); //true
console.log(Object.prototype.toString.call(arr)); //‘[object Array]‘console.log(arr.toString()); //‘1,2,3‘
可以看到,这里的arr.toString是调用了Array.prototype.toString方法,而不是Object.prototype.toString方法
var obj = {name:‘bunny‘};console.log(Object.prototype.toString===obj.toString); //trueconsole.log(Object.prototype.toString.call(obj)); //‘[object Object]‘console.log(obj.toString()); //‘[object Object]‘
可以看到,对于obj来说,它调用的toString方法就是Object.prototype.toString方法.
同样,数值类型,还有函数,都类似于这样...就不再举例了...
另外,null没有toString方法:
var nu = null;console.log(nu.toString); //报错
但是它可以调用其它的toString方法:
var nu=null;Object.prototype.toString.call(nu) //‘[object Null]‘
所以我们可以知道,在Array的原型,String的原型上,以及Number的原型,Function的原型上,都有自己的toString方法,不同类型的对象,会调用不同的toString方法,而不会去调用Object.prototype.toString.
当时,我们可以通过call函数来调用Object.prototype.toString函数,用这个方法,可以精确的获取对象的类型:
‘[object Object]‘
‘[object Array]‘
‘[object String]‘
‘[object Number]‘
‘[object Function]‘
‘[object Undefined]‘
‘[object Null]‘
比如一个判断对象是否为数组的函数:
if(Array.isArray===undefined){ Array.isArray = function(obj){ return Object.prototype.toString.call(obj) === ‘[object Array]‘ } }
javascript的toString深入探究
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。