zoukankan      html  css  js  c++  java
  • 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]'
        }
      }
  • 相关阅读:
    Django路由系统
    修改数据库时区问题
    Django框架篇
    前端css
    前端html
    前端初识
    数据库3
    数据库2
    数据库1
    数据库初识
  • 原文地址:https://www.cnblogs.com/liulangmao/p/4218327.html
Copyright © 2011-2022 走看看