zoukankan      html  css  js  c++  java
  • angularJS 源码阅读之一:toDebugString

    简介:

    这个函数返回调试字符串:

    number,boolean,string,null,undefined,都会转为字符串。

    function 中括号前面有空格的,会去除函数体,没空格的,会输出函数的所有内容。如果想不管有没有空格,都去掉函数体就改成/ *{[sS]*/

    对象会转成JSON字符串,要是对象中的属性A跟属性B都指向同一个对象,那么后面那个属性会变成...。对象中的属性如果值为window,document,scope,就会被转换成$WINDOW,$DOCUMENT,$SCOPE。

    从源码中可以发现,JSON.stringify是可以把null,boolean,number转成字符串的。

    JSON.stringify的详细介绍可以看这里:http://www.cnblogs.com/ningvsban/p/3660654.html

    function toDebugString(obj) {
      if (typeof obj === 'function') {
        //正则表达式,去除函数体,例如:function a (){var i = 0;},会过滤成function a ()
        //这个正则表达式很奇葩,要是()前面没有空格或者多个空格,就不会去除函数体了,改成下面这样
        // / *{[sS]*/
        //才能匹配,还有$有啥用?
        return obj.toString().replace(/ {[sS]*$/, '');
      } else if (isUndefined(obj)) {
        return 'undefined';
      } else if (typeof obj !== 'string') {
        return serializeObject(obj);
      }
      return obj;
    }

    测试代码:

      console.log(toDebugString(1));
      console.log(toDebugString(true));
      console.log(toDebugString("大叔"));
      console.log(toDebugString(null));
      console.log(toDebugString(undefined));
      console.log(toDebugString(function(){
        var name = "中括号前面没空格的函数,保留函数体";
      }));
      console.log(toDebugString(function a() {
        var name = "中括号前面有空格的函数";
      }));
      var obj = {name:"大叔"};
      var a = toDebugString(null);
      console.log(toDebugString({name:"大叔",window:window,document:document,height:obj,obj}));

    输出内容:

    1
    true
    大叔
    null
    undefined
    function (){
    var name = "中括号前面没空格的函数,保留函数体";
    }
    function a()
    {"name":"大叔","window":"$WINDOW","document":"$DOCUMENT","height":{"name":"大叔"},"width":"..."}

  • 相关阅读:
    并发编程(2)-进程、并发和并行讲解
    并发编程(5)-管道、数据共享、进程池
    并发编程(4)-进程中的锁、信号量、 事件和队列
    人工智能及数学运算的基础方法
    并发编程(3)-进程模块
    判断一个数是否是水仙花数
    js中隐式类型转换测试
    webpack使用webpack-dev-middleware进行热重载
    网页打包安卓APP流程
    「postgres」查看数据库连接数
  • 原文地址:https://www.cnblogs.com/geilishu/p/5034339.html
Copyright © 2011-2022 走看看