当前位置: 首页 > news >正文

js判断是对象还是数组的方法

效果图

方法

/**
 * 判断是否数组,例如[]
 * @author Rudon
 */
function is_array (val) {
	// ES5方法
	return Array.isArray(val)? true: false;
}

/**
 * 判断是否对象,不包括数组,例如{}
 * @author Rudon
 */
function is_object (val) {
	// ES5方法
	return (val instanceof Object && !Array.isArray(val))? true: false;
}

完整例子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JS判断是否数组、对象</title>
</head>
<body>
    
    <script>


/**
 * 判断是否数组,例如[]
 * @author Rudon
 */
function is_array (val) {
	// ES5方法
	return Array.isArray(val)? true: false;
}

/**
 * 判断是否对象,不包括数组,例如{}
 * @author Rudon
 */
function is_object (val) {
	// ES5方法
	return (val instanceof Object && !Array.isArray(val))? true: false;
}



let a = [1,2,3]
let b = {"name": "Kim", "age": 18}
let c = null
let d = 100
let e = 'string'

console.log('------------')
console.log('是否数组', a,'  >> ', is_array(a))
console.log('是否数组', b,'  >> ', is_array(b))
console.log('是否数组', c,'  >> ', is_array(c))
console.log('是否数组', d,'  >> ', is_array(d))
console.log('是否数组', e,'  >> ', is_array(e))
console.log('------------')
console.log('是否对象', a,'  >> ', is_object(a))
console.log('是否对象', b,'  >> ', is_object(b))
console.log('是否对象', c,'  >> ', is_object(c))
console.log('是否对象', d,'  >> ', is_object(d))
console.log('是否对象', e,'  >> ', is_object(e))


    </script>

</body>
</html>

更多

分析三种判断数组的方法
http://t.zoukankan.com/ningyn0712-p-11827198.html
我们都知道instanceof是用来判断对象的类型的,并且所有的对象 instanceof Object结果都是true

内部机制是通过判断对象的原型链中是否能找到同类型的prototype
其原理是一层一层查找__proto__,如果和constructor.prototype的值相等则返回true,否则返回false
根据这一点可得,如果想判断一个对象是否是数组,需要判断这个对象的原型链上是否存在Array的原型:

console.log([] instanceof Array)  // true
console.log([] instanceof Object)  // true
很容易可以发现这个方法有个问题是无法判断对象是属于Object还是Array。


2. Array.isArray( obj )
obj是待检测的对象,如果结果返回Array则整体返回true,否则该表达式返回false。

ES5新增的方法
Array.isArray()优于instanceof的地方在于:Array.isArray()可以检测iframes

相关文章:

  • 开学季河科大社区活动详情介绍实例
  • String字符串的常用方法
  • 软件测试适合女生吗?我是一名文员、不甘心着平凡的生活!!
  • 【操作系统】操作系统基础必知必会
  • 容错限流框架之Hystrix上
  • ES6模块
  • vim 多行注释
  • 基于MATLAB的迭代学习控制(Iterative Learning Control,ILC)算法的仿真与分析
  • 【LEACH协议】基于matlab最佳簇半径的无线传感器网络分簇路由算法【含Matlab源码 2087期】
  • PDA手持机轻松解决库存盘点难题支持一维二维码扫描
  • vscode启动不了,折腾了半天发现已经不支持win7
  • 【智能优化算法-麻雀搜索算法】基于萤火虫结合麻雀搜索算法求解单目标优化问题附matlab代码
  • 22-09-04 西安 谷粒商城(01)MySQL主从复制、MyCat读写分离、MyCat分库分表
  • 猿创征文|Python3,10分钟写了一个WIFI 万(破) 能 (解) 钥 (神) 匙 (器),YYDS。
  • 【每日一练】图解:链表内指定区间反转
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【刷算法】从上往下打印二叉树
  • Android 控件背景颜色处理
  • Consul Config 使用Git做版本控制的实现
  • input的行数自动增减
  • Iterator 和 for...of 循环
  • JDK9: 集成 Jshell 和 Maven 项目.
  • JS 面试题总结
  • Mocha测试初探
  • npx命令介绍
  • Python学习之路13-记分
  • Rancher如何对接Ceph-RBD块存储
  • XML已死 ?
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 小程序 setData 学问多
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (day 12)JavaScript学习笔记(数组3)
  • (rabbitmq的高级特性)消息可靠性
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (九十四)函数和二维数组
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .htaccess配置重写url引擎
  • .net 无限分类
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • .pyc文件是什么?
  • ?
  • @Autowired自动装配
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现
  • [ C++ ] STL_vector -- 迭代器失效问题
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式