You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何通过变量原型获取布尔值区分普通对象与数组

实现方案

首先说明:数组本质是 Object 的子类实例,直接使用 instanceof Object 判断会同时命中数组和普通对象,无法区分二者,以下是符合需求的校验写法:

方案1:使用原型对比(和你测试代码的逻辑完全匹配)

直接判断变量的原型是否等于Object的原型即可:

// 校验函数
function checkIsObject(val) {
  return Object.getPrototypeOf(val) === Object.prototype
}

// 测试效果
checkIsObject({a: '1'}) // 返回 true
checkIsObject([1,2,3]) // 返回 false

如果需要兼容null、undefined等边界场景,可以补充前置判断:

function checkIsObject(val) {
  return val != null && typeof val === 'object' && Object.getPrototypeOf(val) === Object.prototype
}

方案2:使用toString标签判断(兼容性最好,无跨上下文问题)

调用Object原型上的toString方法,可以准确获取变量的内置类型标签:

function checkIsObject(val) {
  return Object.prototype.toString.call(val) === '[object Object]'
}

数组调用该方法会返回[object Array],可以直接和普通对象区分开。

方案3:组合条件判断

先排除数组类型,再判断是否为对象类型:

function checkIsObject(val) {
  return typeof val === 'object' && val !== null && !Array.isArray(val)
}

条件判断使用示例

你可以直接在if语句中使用上述逻辑:

const target = [1,2,3]
// 直接内联判断
if (Object.prototype.toString.call(target) === '[object Object]') {
  // 是普通对象,执行对应逻辑
} else {
  // 是数组/其他类型,执行对应逻辑
}

内容的提问来源于stack exchange,提问作者Vikas Acharya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:24:08