JavaScript - 不同类型对象转换为字符串的一般规则与常用方法



主要参考


转型函数String()

该方法的具体转换规则可分为以下三种情况:

  • null值直接返回"null"

  • undefined值直接返回"undefined"

  • 其他类型的参数直接调用其toString()方法,并返回对应值。

各类型对象的toString()方法

此处仅讨论JavaScript中常见基础内置对象所定义的toString()方法表现:

  • Object.prototype.toString()

    • 返回值为:[object type]

    • 可用来检测对象类型

      var toString = Object.prototype.toString;
      
      console.log(toString.call(new Object())); // "[object Object]"
      console.log(toString.call(new Date())); // "[object Date]"
      
      console.log(toString.call(null)); // "[object Null]"
      console.log(toString.call(undefined)); // "[object Undefined]"
      

      按照原型链的查找规则,各类型对象直接调用toString()时,将优先调用自身重写的toString()方法,此处注意区分结果值。

  • Function.prototype.toString()

    • 对于用户定义的Function对象,将返回包含函数源码定义的字符串;

    • 对于内置函数对象或通过Function.prototype.bind生成的绑定新函数,将返回"function () {\n [native code]\n}",示例如下:

      function foo() {
          console.log("123");
      }
      console.log(foo.bind("321").toString());
      /* 
      * function bound foo() {
      *     [native code]
      * }
      */
      
  • Boolean.prototype.toString()

    将根据对象的布尔值来返回"true""false"

  • Error.prototype.toString()

    方法实现的具体语义可描述如下:

    Error.prototype.toString = function() {
        'use strict';
        
        var obj = Object(this);
        if(obj !== this) {
            // Object(null) or Object(undefined): create and return an empty object
            throw new TypeError();
        }
        
        var name = this.name;
        name = (name === undefined) ? 'Error' : String(name);
        
        var msg = this.message;
        msg = (msg === undefined) ? '' : String(msg);
        
        if(name === '') {
            return msg;
        }
        if(msg === '') {
            return name;
        }
        
        return name + ': ' + msg;
    }
    
  • Number.prototype.toString()

    • 语法:numObj.toString([radix])

      该方法包含一个可选参数radix,用来指定数值基数(2-36),缺省为10,超出范围时将报错

    • 如果数值包含负号,则返回值中也将保留负号

  • String.prototype.toString()

    该方法返回值等同于String.prototype.valueOf(),将直接返回对象的字符串表示

  • Array.prototype.toString()

    • 将数组中各元素连接,并以逗号分隔,返回字符串:

      var arr = ["aa", "bb", 123, 321];
      console.log(arr.toString()); // "aa,bb,123,321"
      
    • 实际数组中元素的返回也是调用各自的toString()方法:

      var arr = [{
          "aa" : 123
      }, {
          "bb" : 321
      }];
      console.log(arr.toString()); // "[object Object],[object Object]"
      
  • Date.prototype.toString()

    将返回ECMA-262中定义的时间描述格式,如下示例:

    console.log(new Date().toString()); // "Thu Sep 20 2018 15:09:22 GMT+0800"
    

    可大致总结为:[WeekDay] [MonthName] [Date] [Year] [Hour]:[Minute]:[Second] GMT[TimezoneOffsetSign: +/-][HourOffet][MinuteOffset]


posted @ 2018-09-20 15:15  JustKidding  阅读(176)  评论(0编辑  收藏  举报