JS判断数组那点事


Posted in Javascript onOctober 10, 2017

面试题中有个这样题目 如何判断数组 大家都知道哪些方法

其实有时候 明明知道哪些方法 但在关键时候就是说不上来

typeof运算符

typeof会返回这个类型的字符串

var a = '123'
 console.log(typeof(a)) //string
 var b = []
 console.log(typeof(b)) //object
 var c = {}
 console.log(typeof(c)) //object
 var d = null
 console.log(typeof(d)) //object

上述看到 数组 对象 null 用typeof返回都是object 这种方法不能识别出是否为数组

原型contructor链方法

实例化有一个contructor属性 这个属性指向生成对象 数组的方法

var a = []
 console.log(a.__proto__.constructor) //ƒ Array() { [native code] }
 var b = {}
 console.log(b.__proto__.constructor) //ƒ Object() { [native code] }

上述看到 数组是由Array函数实例化的 对象由Object函数实例化来得

感觉这种方法是可以了 但是 constructor这个属性是可以被改写的

var a = []
  a.__proto__.constructor = Object
  console.log(a.__proto__.constructor) //ƒ Object() { [native code] }

可以看到 这个是 变成了数组判断成了对象 所以这个方法也不是最好的

instanceof

这个方法是判断某个构造函数的prototype属性所指向的对象是否在另外一个要检测对象的原型链上

var a = []
  console.log(a instanceof Array) //a对象的原型链上能找到Array true
  console.log(a instanceof Object) //true 原型链上也能找到对象

上述这种也不是特别好 判断不出是数组还是对象

通用的方法 toString

toString() 方法返回放映这个对象的字符串

var a= '123'
  console.log(a.toString()) //123
  var b = [1,2,3]
  console.log(b.toSting()) //1,2,3
  var c = {}
  console.log(c.toString)) //[object Object]

可以看到只有对象返回对象类型

返回[object type] type代表对象的类型

判断对象用Object的toString的方法拿过来用

var a =[]
 Object.prototype.toString.call(a) //[object Array]

这个对象 toString方法是可以判断出是否为数组

但是这里注意下有个情况就是对象原型上toString() 也是可以更改的

Array.isArray(XX)

个人感觉还是使用通用方法 toString() 方法靠谱

总结

以上所述是小编给大家介绍的JS判断数组那点事,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jQuery 数据缓存data(name, value)详解及实现
Jan 04 Javascript
JavaScript数组和循环详解
Apr 27 Javascript
js实现每日自动换一张图片的方法
May 04 Javascript
JavaScript中使用Math.PI圆周率属性的方法
Jun 14 Javascript
JS基于Mootools实现的个性菜单效果代码
Oct 21 Javascript
JavaScript中关联原型链属性特性
Feb 13 Javascript
Bootstrap源码解读下拉菜单(4)
Dec 23 Javascript
基于D3.js实现时钟效果
Jul 17 Javascript
ES6基础之展开语法(Spread syntax)
Feb 21 Javascript
浅谈javascript中的prototype和__proto__的理解
Apr 07 Javascript
解决vue admin element noCache设置无效的问题
Nov 12 Javascript
js实现弹窗猜数字游戏
Nov 26 Javascript
template.js前端模板引擎使用详解
Oct 10 #Javascript
AngularJS中table表格基本操作示例
Oct 10 #Javascript
AngularJS中控制器函数的定义与使用方法示例
Oct 10 #Javascript
JavaScript实现计数器基础方法
Oct 10 #Javascript
JS实现合并json对象的方法
Oct 10 #Javascript
jQuery实现的form转json经典示例
Oct 10 #jQuery
JS实现websocket长轮询实时消息提示的效果
Oct 10 #Javascript
You might like
短波问题解答
2021/02/28 无线电
使用XDebug调试及单元测试覆盖率分析
2011/01/27 PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
2014/05/04 PHP
Joomla语言翻译类Jtext用法分析
2016/05/05 PHP
php实现微信扫码支付
2017/03/26 PHP
解决Laravel5.5下的toArray问题
2019/10/15 PHP
javascript 动态参数判空操作
2008/12/22 Javascript
DOM节点删除函数removeChild()用法实例
2015/01/12 Javascript
js实现同一页面可多次调用的图片幻灯切换效果
2015/02/28 Javascript
js如何准确获取当前页面url网址信息
2020/09/13 Javascript
Java遍历集合方法分析(实现原理、算法性能、适用场合)
2016/04/25 Javascript
在Mac OS上安装使用Node.js的项目自动化构建工具Gulp
2016/06/18 Javascript
Javascript 实现简单计算器实例代码
2016/10/23 Javascript
javascript内存分配原理实例分析
2017/04/10 Javascript
javascript 判断一个对象为数组的方法
2017/05/03 Javascript
基于Vue的文字跑马灯组件(npm 组件包)
2017/05/24 Javascript
javascript 取小数点后几位几种方法总结
2017/08/02 Javascript
JS实现图片居中悬浮效果
2017/12/25 Javascript
React组件refs的使用详解
2018/02/09 Javascript
vue路由组件按需加载的几种方法小结
2018/07/12 Javascript
如何解决webpack-dev-server代理常切换问题
2019/01/09 Javascript
layui自定义验证,用ajax查询后台是否有重复数据,form.verify的例子
2019/09/06 Javascript
[01:01:43]EG vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
python网络编程学习笔记(二):socket建立网络客户端
2014/06/09 Python
安装Python的web.py框架并从hello world开始编程
2015/04/25 Python
python中的编码知识整理汇总
2016/01/26 Python
Python中static相关知识小结
2018/01/02 Python
对python中list的拷贝与numpy的array的拷贝详解
2019/01/29 Python
Django之使用内置函数和celery发邮件的方法示例
2019/09/16 Python
pandas数据拼接的实现示例
2020/04/16 Python
Python小白学习爬虫常用请求报头
2020/06/03 Python
python两个list[]相加的实现方法
2020/09/23 Python
html Table 表头固定的实现
2019/01/22 HTML / CSS
2014年感恩母亲演讲稿
2014/05/27 职场文书
Vue中插槽slot的使用方法与应用场景详析
2021/06/08 Vue.js
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/07 PostgreSQL