数据类型
es5数据类型:
非引用型:
- “Undefined” : 顾名思义,无法确定。值未定义,很多情况是引用的变量没有明确的值。
- “Boolean” : 布尔值,只有”true” 和 “false”两个值。
- “String” :字符串。
- “Number” :数值。其中”NAN” 属于这个数据类型
引用型:
- “Object” : “Null”属于对象类型。
- symbol
- (由于对symbol认知比较浅,不加深入探讨。)
判断数据类型
这里判断类型的是根据Underscore.js 1.8.3源码整理。
最直接是使用 typeof 判断数据类型,但这样直接判断存在许多误差和特殊情况。
1.判断是否为 DOM 节点:
这里的 “!!” 是起到强制转换为布尔值的一种做法。
2.判断 null 和 undefined
3.判断 NaN
首先要判断是否为Number,排除”null”和”undefined”特殊情况。
NaN不能通过相等操作符(== 和 ===)来判断 ,因为 NaN == NaN 和 NaN === NaN 都会返回 false。
判断是否为有限数值:
4.判断是否为数组
虽然ES5中已经有 isArray() 这一方法,但其中存在兼容问题。所以这里需要加一步判断。
5.判断是否为一个函数
判断是否为函数参数:
arguments有个特有属性callee。根据这个属性可以判断。
6.判断是否为一个对象
判断两个对象是否相同
这里贴出其中的代码和个人的一部分理解。
####
对于数组和对象只能用递归了,同时用aStack和bStack来暂存递归中的子对象。这里一个小技巧的就是先判断数组/属性的长度,如果不相等可以有效地减少递归。