JavaScript数据类型及检测方法

首页 / 学习笔记 / 正文

数据类型

  • 七种原始数据类型(值类型/基本类型):

    • number :用于任何类型的数字:整数或浮点数,在 ±(253-1) 范围内的整数。
    • bigint :用于任意长度的整数。
    • string :用于字符串:一个字符串可以包含 0 个或多个字符,所以没有单独的单字符类型。
    • boolean :用于 truefalse
    • null :用于未知的值 —— 只有一个 null 值的独立类型。
    • undefined :用于未定义的值 —— 只有一个 undefined 值的独立类型。
    • symbol :用于唯一的标识符。
  • 非原始数据类型(引用数据类型/对象类型):

    • object :用于更复杂的数据结构。

      • 对象(Object)
      • 数组(Array)
      • 函数(Function)

检测数据类型

typeofstringnumberbooleannullundefinedsymbolobjectfunction

  • 检测基本数据类型,null会被检测为object
  • 检测复杂数据类型,除function外,均为object

instanceof:检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上

  • 只能检测复杂数据类型
  • console.log([] instanceof Array)  // true

    toString:

  • toString()Object 的原型方法,调用该方法,默认返回当前对象的 [[Class]] 。这是一个内部属性,其格式为 [object Xxx] ,其中 Xxx 就是对象的类型
  • 对于 Object 对象,直接调用 toString() 就能返回 [object Object] 。而对于其他对象,则需要通过 call / apply 来调用才能返回正确的类型信息。
  • Object.prototype.toString.call('') ;              // [object String]
    Object.prototype.toString.call(1) ;               // [object Number]
    Object.prototype.toString.call(true) ;            // [object Boolean]
    Object.prototype.toString.call(Symbol());         // [object Symbol]
    Object.prototype.toString.call(undefined) ;       // [object Undefined]
    Object.prototype.toString.call(null) ;            // [object Null]
    Object.prototype.toString.call(new Function()) ;  // [object Function]
    Object.prototype.toString.call(new Date()) ;      // [object Date]
    Object.prototype.toString.call([]) ;              // [object Array]
    Object.prototype.toString.call(new RegExp()) ;    // [object RegExp]
    Object.prototype.toString.call(new Error()) ;     // [object Error]
    Object.prototype.toString.call(document) ;        // [object HTMLDocument]
    Object.prototype.toString.call(window) ;          // [object global] window 是全局对象 global 的引用
    

constructor:

  •     const arr = []
        console.log(arr.constructor === Array)
  • 只能检测由字面量创建出来的数据类型

    isArray:

  • console.log(Array.isArray([]));
  • 注意没有isObject
评论区
头像