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);    //true
console.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深入探究的更多相关文章

  1. JavaScript parseInt() toString()函数

    parseInt(string, radix) string:必需.要被解析的字符串 radix:可选.表示要解析的数字的基数.该值介于 2 ~ 36 之间. 如果省略该参数或其值为 0,则数字将以 ...

  2. javascript之toString()和valueOf()函数

    1.我们为什么要了解这两种方法 众所周知,toString()函数和valueOf函数,这两个函数是Object类的对象生来就拥有的,而且他们还可以允许我们重写,那么,这两个函数到底有什么用呢? 从名 ...

  3. JavaScript的toString()

    JavaScript toString() 方法 JavaScript Boolean 对象 定义和用法 toString() 方法可把一个逻辑值转换为字符串,并返回结果. 语法 booleanObj ...

  4. JavaScript异步编程解决方案探究

    javascript的天生单线程特性,使得异步编程对它异常重要,早期的通常做法是用回调函数来解决.但是随着逻辑的复杂,和javascript在服务端的大显神通,使得我们很容易就陷入“回调陷井”的万丈深 ...

  5. JavaScript的toString()和valueof()方法

    toString()方法: 函数:函数 (function(){}).toString(); //返回"function(){}" typeof((function(){}).to ...

  6. javascript中toString和valueOf方法的区别

    toString():将对象转为字符串 valueOf():获取对象的原始值, 1.针对基本类型的变量:如在string,number,boolean类型的变量上调用这两个方法时,直接返回原始值,即变 ...

  7. 在javascript中toString 和valueOf的区别

    1.toString()方法:主要用于Array.Boolean.Date.Error.Function.Number等对象转化为字符串形式.日期类的toString()方法返回一个可读的日期和字符串 ...

  8. JavaScript toString、String和stringify方法区别

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  9. JavaScript中的valueOf与toString方法

    基本上,所有JS数据类型都拥有valueOf和toString这两个方法,null除外.它们俩解决javascript值运算与显示的问题. JavaScript 的 valueOf() 方法 valu ...

随机推荐

  1. 51单片机——My-Clock项目

    技术:51单片机.光敏传感器.PCF8591.DHT11.DS1302.OLED显示屏   概述 项目My-Clock是一个环境监测时钟,接入光敏传感器和温湿度传感器监测环境信息,加入DS1302模块 ...

  2. 要成为linux网站运维工程师必须要掌握的技能

    要成为linux网站运维工程师必须要掌握的技能 2015-07-27 发表 老男孩点评:感谢此文的作者,写的非常到位,值得入门的初学者认真看看 我是一名linux运维工程师,确切的说是网站运维工程师, ...

  3. AdapterView的使用与getView函数详解

    作者:徐冉.文章首发在他的个人博客. ) AdapterView&Adapter家族 adapterview就是和数据有关的控件,如listview,gridview,spinnerview等 ...

  4. 根据友盟统计错误分析线上的崩溃-b

    登陆友盟官网找到友盟统计,找到你iOS平台下你所属的APP(图1) 图1 点击进去会出现当日错误列表,选择你发生错误的日期(图2) 图2 我们可以看到,这一天中出现了两个错误,每个错误出现在不同的时间 ...

  5. Windows中"打开方式..."无法指定程序的解决办法

    Windows真DT, 今天升级了vim, 从vim73到vim74, 突然发现右键菜单打开方式中的VIM不见了, 于是手动重新指定到vim74\gvim.exe, 未果, Windows就直接忽略了 ...

  6. background-size ie8不支持怎么解决

    background-size这个属性是css3,新增的属性,现在很多浏览器已经支持了,但是IE系列的浏览器却没有支持,比如IE8,下面介绍下如何解决这个问题 在IE浏览器中,可以通过滤镜filter ...

  7. PHP 将html页面导出至Word

    <?php header("Content-Type: application/msword"); header("Content-Disposition: att ...

  8. 12C -- 配置EM Express的端口

    EM Express是基于web接口的图形化数据库管理工具. 内嵌到数据库中,可以用来监控.管理数据的性能和完成大多数管理工作. EM Express是轻量级的管理工具,减少了数据库服务器的开销.没有 ...

  9. MySQL -- 全文检索(查询扩展检索)

    通常用在查询的关键词太短,用户需要隐含知识进行扩展.例如,查单词database时,用户可能还希望不仅仅包含database的文档,可能还指包含mysql.oracle.db2等单词.这时就需要查询扩 ...

  10. 如何学好C、C++语言

    如何学好C语言 有人在酷壳的留言版上询问下面的问题 keep_walker : 今天晚上我看到这篇文章. http://programmers.stackexchange.com/questions/ ...