javascript数据类型总结

数据类型

es5数据类型:

非引用型:

  • “Undefined” : 顾名思义,无法确定。值未定义,很多情况是引用的变量没有明确的值。
  • “Boolean” : 布尔值,只有”true” 和 “false”两个值。
  • “String” :字符串。
  • “Number” :数值。其中”NAN” 属于这个数据类型

    引用型:

  • “Object” : “Null”属于对象类型。
    • Array类型
    • Data类型
    • RegExp类型
    • Function类型
    • ……

      Es6 新增数据类型

  • symbol
  • (由于对symbol认知比较浅,不加深入探讨。)

判断数据类型

这里判断类型的是根据Underscore.js 1.8.3源码整理。
最直接是使用 typeof 判断数据类型,但这样直接判断存在许多误差和特殊情况。

1.判断是否为 DOM 节点:

这里的 “!!” 是起到强制转换为布尔值的一种做法。
image

2.判断 null 和 undefined

image

3.判断 NaN

首先要判断是否为Number,排除”null”和”undefined”特殊情况。
NaN不能通过相等操作符(== 和 ===)来判断 ,因为 NaN == NaN 和 NaN === NaN 都会返回 false。
image

判断是否为有限数值:

image

4.判断是否为数组

虽然ES5中已经有 isArray() 这一方法,但其中存在兼容问题。所以这里需要加一步判断。
image

5.判断是否为一个函数

image

判断是否为函数参数:

arguments有个特有属性callee。根据这个属性可以判断。
image

6.判断是否为一个对象

image

判断两个对象是否相同

这里贴出其中的代码和个人的一部分理解。

####
imageimage

对于数组和对象只能用递归了,同时用aStack和bStack来暂存递归中的子对象。这里一个小技巧的就是先判断数组/属性的长度,如果不相等可以有效地减少递归。
image