js类型判断

本文介绍了JavaScript中对象类型的检测方法,包括利用typeof操作符、class2Type映射及Array.isArray等进行类型判断,并提供了实用的函数实现。此外,还讨论了window对象的特殊性及类数组对象的识别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码

let class2Type = {}
let dataType = ['Boolean', 'Number', 'String', 'Function',
  'Array', 'Date', 'RegExp', 'Object', 'Error'
]
dataType.forEach((name, i) => {
  class2Type['[object ' + name + ']'] = name.toLowerCase()
})

// 类型判断
function type(obj) {
  if (obj === null || obj === undefined) {
    return String(obj)
  }
  return typeof obj === 'object' || typeof obj === 'function' ?
    class2Type[class2Type.toString.call(obj)] || 'object' :
    typeof obj;
}

// 判断是不是函数
function isFunction(obj) {
  return typeof obj === 'function'
}

// 判断是不是数组
function isArray(obj) {
  if (Array.isArray) {
    return Array.isArray(obj)
  }
  return type(obj) === 'array'
}

// 判断是不是window对象
function isWindow(obj) {
  return obj !== null && obj !== undefined && obj === obj.window
}

// 判断是不是类数组
function isArrayLike(obj) {
  let length = obj.length;
  let type = type(obj)
  return type === 'array' || type !== 'function' &&
    (typeof length === 'number' && length > 0 && (length - 1) in obj)
}

说明

  1. 判断是否是数组,又新的原生方法Array.isArray, 这里兼容了低版本浏览器
  2. window对象有一个window属性, 这个属性指向window本身,即window.window === window
  3. 类型判断使用typeof是不可靠的,

    Value               Class      Type
    -------------------------------------
    "foo"               String     string
    new String("foo")   String     object
    1.2                 Number     number
    new Number(1.2)     Number     object
    true                Boolean    boolean
    new Boolean(true)   Boolean    object
    new Date()          Date       object
    new Error()         Error      object
    [1,2,3]             Array      object
    new Array(1, 2, 3)  Array      object
    new Function("")    Function   function
    /abc/g              RegExp     object (function in Nitro/V8)
    new RegExp("meow")  RegExp     object (function in Nitro/V8)
    {}                  Object     object
    new Object()        Object     object
    

    为了判断出类型,可以使用Object.prototype.toString方法获取对象的[[Class]]值,

    Object.prototype.toString.call([])    // "[object Array]"
    Object.prototype.toString.call({})    // "[object Object]"
    Object.prototype.toString.call(2)    // "[object Number]"

    这样还不够,还需要单独处理nullundefined

转载于:https://www.cnblogs.com/liuding0304/p/7280562.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值