angularJS 源码阅读之一:toDebugString
简介:
这个函数返回调试字符串:
number,boolean,string,null,undefined,都会转为字符串。
function 中括号前面有空格的,会去除函数体,没空格的,会输出函数的所有内容。如果想不管有没有空格,都去掉函数体就改成/ *\{[\s\S]*/
对象会转成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 ()
//这个正则表达式很奇葩,要是()前面没有空格或者多个空格,就不会去除函数体了,改成下面这样
// / *\{[\s\S]*/
//才能匹配,还有$有啥用?
return obj.toString().replace(/ \{[\s\S]*$/, '');
} 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,width:obj}));
输出内容:
1
true
大叔
null
undefined
function (){
var name = "中括号前面没空格的函数,保留函数体";
}
function a()
{"name":"大叔","window":"$WINDOW","document":"$DOCUMENT","height":{"name":"大叔"},"width":"..."}
angularJS 源码阅读之一:toDebugString的更多相关文章
- avalon源码阅读(1)
来源 写angularJS源码阅读系列的时候,写的太垃圾了. 一个月后看,真心不忍直视,以后有机会的话得重写. 这次写avalonJS,希望能在代码架构层面多些一点,少上源码.多写思路. avalon ...
- angular源码阅读,依赖注入的原理:injector,provider,module之间的关系。
最开始使用angular的时候,总是觉得它的依赖注入方式非常神奇. 如果你跳槽的时候对新公司说,我曾经使用过angular,那他们肯定会问你angular的依赖注入原理是什么? 这篇博客其实是angu ...
- 【原】FMDB源码阅读(三)
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
- 【原】FMDB源码阅读(二)
[原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...
- 【原】FMDB源码阅读(一)
[原]FMDB源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 说实话,之前的SDWebImage和AFNetworking这两个组件我还是使用过的,但是对于 ...
- 【原】AFNetworking源码阅读(六)
[原]AFNetworking源码阅读(六) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这一篇的想讲的,一个就是分析一下AFSecurityPolicy文件,看看AF ...
- 【原】AFNetworking源码阅读(五)
[原]AFNetworking源码阅读(五) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中提及到了Multipart Request的构建方法- [AFHTTP ...
- 【原】AFNetworking源码阅读(四)
[原]AFNetworking源码阅读(四) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇还遗留了很多问题,包括AFURLSessionManagerTaskDe ...
- 【原】AFNetworking源码阅读(三)
[原]AFNetworking源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇的话,主要是讲了如何通过构建一个request来生成一个data tas ...
随机推荐
- .NET 通过 Autofac 和 DynamicProxy 实现AOP
什么是AOP?引用百度百科:AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.实现AOP主要由两 ...
- Basic Sort Algorithms
1. Bubble Sort public void bubbleSort(int[] arr) { boolean swapped = true; int j = 0; int tmp; while ...
- kafka 0.10.2 cetos6.5 集群部署
安装 zookeeper http://www.cnblogs.com/xiaojf/p/6572351.html安装 scala http://www.cnblogs.com/xiaojf/p/65 ...
- mybatis xml配置文件要点说明
mapper映射方式: 1 一一具体列举的方式 2扫描package 如: <mappers> <!-- 告知映射文件方式1,一个一个的配置 <mapper resource= ...
- SpringMVC——请求映射
SpringMVC中,如何处理请求是很重要的任务.请求映射都会使用@RequestMapping标注.其中,类上的标注相当于一个前缀,表示该处理器是处理同一类请求:方法上的标注则更加细化.如,类的标注 ...
- 设置Intellij IDEA 提示出未保存的*星号
IDEA实乃是java开发的神器,然而从eclipse或者MyEclipse转过来的开发每写完一行代码总是习惯的按下ctrl+s,然而IDEA代码编辑器的上方并没有提示未保存的*星号,提示星星,所以觉 ...
- 模板C++ 03图论算法 2最短路之全源最短路(Floyd)
3.2最短路之全源最短路(Floyd) 这个算法用于求所有点对的最短距离.比调用n次SPFA的优点在于代码简单,时间复杂度为O(n^3).[无法计算含有负环的图] 依次扫描每一点(k),并以该点作为中 ...
- 写了一个Mac快速设置、打开和关闭Web代理的Shell命令
缘由(痛点) 每次在Mac上设置Web代理,都需要点开"系统偏好设置 -- 网络 -- 高级 -- 代理",然后分别设置Web代理(HTTP)和安全Web代理(HTTPS),设置完 ...
- shiro开发,shiro的环境配置(基于spring+springMVC+redis)
特别感谢lhacker分享的文章,对我帮助很大 http://www.aiuxian.com/article/p-1913280.html 基本的知识就不在这里讲了,在实战中体会shiro的整体设计理 ...
- CSS浮动、绝对、相对定位
浮动 float:属性{ float:none; 默认值,对象,不漂浮 float:left; 文本流向对象的右边 float:right; }; 清除浮动 clear:属性{ clear:no ...