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":"..."}

  • 相关阅读:
    tomcat配置
    java.net.ConnectException: Connection timed out: connect,java.net.ConnectException: Connection timed out: connect at java.net.DualStackPlainSocketImpl.waitForConnect
    Tomat 下载地址
    Gradle的依赖方式——Lombok在Gradle中的正确配置姿势 本文来源:码农网 本文链接:https://www.codercto.com/a/70161.html
    mssql 那表语句
    监控系统搭建
    vue 子组件触发父组件方法的两种方式
    css margin边界叠加问题详谈
    sticky footer
    JS的构造函数
  • 原文地址:https://www.cnblogs.com/geilishu/p/5034339.html
Copyright © 2011-2022 走看看