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);    //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]‘
    }
  }
时间: 2024-08-01 18:40:07

javascript的toString深入探究的相关文章

JavaScript parseInt() toString()函数

原文:JavaScript parseInt() toString()函数 parseInt(string, radix) string:必需.要被解析的字符串 radix:可选.表示要解析的数字的基数.该值介于 2 ~ 36 之间. 如果省略该参数或其值为 0,则数字将以 10 为基础来解析.如果它以 “0x” 或 “0X” 开头,将以 16 为基数. 如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN. 返回值 返回解析后的数字. 说明 当参数 radix 的值为

javascript之toString()和valueOf()函数

1.我们为什么要了解这两种方法 众所周知,toString()函数和valueOf函数,这两个函数是Object类的对象生来就拥有的,而且他们还可以允许我们重写,那么,这两个函数到底有什么用呢? 从名称上判断,toString()将对象转换为字符串,valueOf将对象转化为值.那么问题来了:什么时候需要将对象转换为值,又什么时候需要将对象转换为字符串呢?------这是我们这篇文章的核心. 在谈这个问题之前,我们先看一道题目: 这是一道很经典的题目,考察的就是我们对于一些基本概念的理解,当然也

JavaScript的toString()

JavaScript toString() 方法 JavaScript Boolean 对象 定义和用法 toString() 方法可把一个逻辑值转换为字符串,并返回结果. 语法 booleanObject.toString() 返回值 根据原始布尔值或者 booleanObject 对象的值返回字符串 "true" 或 "false". 抛出 如果调用该方法的对象不是 Boolean,则抛出异常 TypeError. 提示和注释 注释:在 Boolean 对象被用

javascript中toString跟toLocaleString的区别

toString:无参数,返回一个表示调用这个方法的对象值的字符串.在需要将对象转换为字符串的时候,javaScript都会调用这个方法. 默认的toString()方法的返回值带有的信息量很少,(不过在检测对象的类型时非常有用): var s = {x:1,y:1}.toString(); 代码的计算结果为字符串"[Object Object]" toLocaleString():对象都存在toLocaleString()方法,这个方法返回一个表示这个对象的本地化字符: 在Objec

javascript中的this探究

对this我想作为前端来说接触的是很多的,可能只限于能用的层次,就很多面试题来说,要完全弄懂还是有点距离的,那么我们就来加强理解下吧,参考高三和语言精粹. this和arguments是作为函数的两个特殊对象的,参数this在面向对象编程中非常重要,它的值取决于调用的模式,在js中一共有4种调用模式, 1,方法调用模式 当一个函数保存为一个对象的属性时,我们称之为一个方法,当这个方法被调用的时候,this就被绑定到该对象, var o = { val: 0, sayval: function(n

JavaScript的toString()和valueof()方法

toString()方法: 函数:函数 (function(){}).toString(); //返回"function(){}" typeof((function(){}).toString()); //返回string 数组:数组 [2,3,"gor"].toString(); //返回"2,3,gor" [].toString(); //返回空字符串"" 并且类型为String typeof([2,3,"gor

JavaScript的Boolean逻辑运算探究

相信每个用JS的人都会经常遇到巧用逻辑运算符简化代码的情形: evnt=evnt || window.event; ... var obj = unKnownObj1&&unKnownObj2&&unKnownObj3; 这些逻辑运算符的原理是什么呢?我动手测试了一下,做一个总结. 首先,需要把JS的类型转换机制引进来.其他数据类型ToBoolean的结果先放到这里: udefined.null结果是false. Number如果参数为 +0, -0 或 NaN,则结果为

Javascript之运行原理探究

Javascript在Web服务器端执行原理: 1.客户端请求数据,即我们在上网时在地址栏中输入某个网址,浏览器接收到数据之后,向远程web服务器发送请求报文. 2.web服务器响应请求,web服务器找到请求的数据,并将整个页面包含javascript的脚本代码作为相应内容,发送回客户端机器. 3.客户端浏览器解释并执行带Javascript脚本的代码,客户端浏览器打开回应的网页数据内容,从上往下逐行读取并显示其中的html或者脚本代码,根据解析完成的HTML标签完成相应的动作.脚本是从服务器端

JavaScript中valueOf函数与toString方法

基本上,所有JS数据类型都拥有valueOf和toString这两个方法,null除外.它们俩解决javascript值运算与显示的问题,本文将详细介绍,有需要的朋友可以参考下 JavaScript中valueOf函数方法是返回指定对象的原始值.使用方法: object.valueOf( )object是必选项参数是任意固有 JScript 对象. 每个JavaScript固有对象的 valueOf 方法定义不同. 对象 返回值 Array 数组的元素被转换为字符串,这些字符串由逗号分隔,连接在