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 相关文章推荐
JS 建立对象的方法
Apr 21 Javascript
js AspxButton的客户端操作
Jun 26 Javascript
jQuery 数据缓存模块进化史详细介绍
Nov 19 Javascript
js实现简洁的TAB滑动门效果代码
Sep 06 Javascript
jQuery实现背景弹性滚动的导航效果
Jun 01 Javascript
js判断空对象的实例(超简单)
Jul 26 Javascript
js+css3实现旋转效果
Jan 20 Javascript
ES6学习笔记之Set和Map数据结构详解
Apr 07 Javascript
微信小程序使用for循环动态渲染页面操作示例
Dec 25 Javascript
vue实现在线预览pdf文件和下载(pdf.js)
Nov 26 Javascript
Vue双向绑定实现原理与方法详解
May 07 Javascript
javascript实现倒计时关闭广告
Feb 09 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
php出现Cannot modify header information问题的解决方法大全
2008/04/09 PHP
php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
2011/10/31 PHP
PHP中几种常见的超时处理全面总结
2012/09/11 PHP
PHP实现克鲁斯卡尔算法实例解析
2014/08/22 PHP
php+mysqli实现批量替换数据库表前缀的方法
2014/12/29 PHP
PHP mkdir创建文件夹实现方法解析
2020/11/13 PHP
javascript 文件的同步加载与异步加载实现原理
2012/12/13 Javascript
javascript实现促销倒计时+fixed固定在底部
2013/09/18 Javascript
基于jquery实现的文字向上跑动类似跑马灯的效果
2014/06/17 Javascript
jquery根据锚点offset值实现动画切换
2014/09/11 Javascript
jQueryMobile之Helloworld与页面切换的方法
2015/02/04 Javascript
使用纯javascript实现放大镜效果
2015/03/18 Javascript
javascript实现input file上传图片预览效果
2015/12/31 Javascript
关于JavaScript作用域你想知道的一切
2016/02/04 Javascript
Vue.js第三天学习笔记(计算属性computed)
2016/12/01 Javascript
jQuery中get方法用法分析
2016/12/07 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
javascript深拷贝的原理与实现方法分析
2017/04/10 Javascript
JS实现上传图片实时预览功能
2017/05/22 Javascript
Node.js 中使用 async 函数的方法
2017/11/20 Javascript
vue裁切预览组件功能的实现步骤
2018/05/04 Javascript
JS实现点击拉拽轮播图pc端移动端适配
2018/09/05 Javascript
Node配合WebSocket做多文件下载以及进度回传
2019/11/07 Javascript
[01:02:38]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第二场 1月10日
2021/03/11 DOTA
在Python的web框架中中编写日志列表的教程
2015/04/30 Python
Python内置函数——__import__ 的使用方法
2017/11/24 Python
python可视化爬虫界面之天气查询
2019/07/03 Python
flask框架单元测试原理与用法实例分析
2019/07/23 Python
解决PyCharm无法使用lxml库的问题(图解)
2020/12/22 Python
浅谈利用缓存来优化HTML5 Canvas程序的性能
2015/05/12 HTML / CSS
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
素质拓展感言
2014/01/29 职场文书
三年级科学教学反思
2014/01/29 职场文书
总经理助理岗位职责范本
2015/03/31 职场文书
go:垃圾回收GC触发条件详解
2021/04/24 Golang
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL