JavaScript 数据类型检测

来源:互联网 发布:华傲数据借贷产品 编辑:程序博客网 时间:2024/05/21 08:46

js 的数据类型分为两类: 原始类型(Primitive type)和引用类型(Reference type),两者在内存中的存储位置不同。判断一个变量属于哪种类型,两种类型额判断方式也有所不同,分别使用typeofinstanceof进行检测。

原始类型

原始类型又叫做基本类型,在ECMAScript5标准中共规定了5中基本类型,分别是:

  • 数组类型(Number)
  • 字符串类型(String)
  • 布尔值(Boolean)
  • Null
  • Undefined
  • 符号对象(Symbol)ES6新增的
    原始类型存储在内存栈(stack)中 ,也就是说直接存储的变量的值。对于原始类型的访问是值访问,我们可以直接操作变量的实际值。

引用类型

除了6中原始类型之外都是引用类型:

  • 对象类型(Object)
  • 数组类型(Array)
  • 日期类型(Date)
  • 错误类型(Error)
  • 正则表达式类型(RegEx)
  • 函数类型(Function)
  • 在ES6中还新增了PromiseMap的引用类型
    引用类型是存储在内存堆(heap)中的对象,也就是说直接存储的变量的值是一个指向原始对象的指针。对于原始类型的访问时引用访问,我们不能直接操作对象的实际内存空间

原始类型的检测

原始类型的变量,除了null之外都可以使用typeof进行检测。typeof使用:

typeof val/(val)

所有返回结果如下:

typeof 12/(12) // 'number'
typeof '12'/('12') // 'string'
typeof true/(true) // 'boolean'
typeof undefined/(undefined) // 'undefined'
typeof null/(null) // 'object'
typeof 12/(12) // number

对于原始类型的null类型的判断类型时应该使用 === 或者 !== 判断

引用类型额检测

在JavaScript中Object是所有引用类型的基类型,所以大多数的引用类型使用typeof判断的时候都返回object,Function返回function。所有对于引用类型的检测使用instanceof判断,语法:

value instanceof constructor

instanceof:可以用来判断某个构造函数的prototype属性是不是存在于一个要检测的对象的原型链上。
- 普遍用法:
A instanceof B: 检测B.prototype是否存在于参数A的原型链上。使用instanceof判断一个实例是否属于某个类型

function B () {    // TODO..}var b = new B();console.log(b instanceof B) // true
  • 继承关系
    instanceof 可以在继承关系中用来判断一个实例是否属于它的父类型.

    function A () {}function B () {}B.prorotype = new A()var b = new B()console.log(b instanceof B) // trueconsole.log(b instanceof A) // true
0 0
原创粉丝点击