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:window.onload的使用介绍
Nov 13 Javascript
JS控制表格实现一条光线流动分割行的方法
Mar 09 Javascript
推荐10 个很棒的 jQuery 特效代码
Oct 04 Javascript
mvc中form表单提交的三种方式(推荐)
Aug 10 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
Dec 03 Javascript
jquery插件bootstrapValidator表单验证详解
Dec 15 Javascript
AngularJS创建一个上传照片的指令实例代码
Feb 24 Javascript
详解angularjs4部署文件过大解决过程
Dec 05 Javascript
JS实现盒子拖拽效果
Feb 06 Javascript
如何使用JavaScript检测空闲的浏览器选项卡
May 28 Javascript
原生JS运动实现轮播图
Jan 02 Javascript
Javascript生成器(Generator)的介绍与使用
Jan 31 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之生成GIF动画的实现方法
2013/06/07 PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
2017/04/15 PHP
通过jQuery打造支持汉字,拼音,英文快速定位查询的超级select插件
2010/06/18 Javascript
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
原生js拖拽(第一课 未兼容)拖拽思路
2013/03/29 Javascript
JS实现图片垂直居中显示小结
2016/12/13 Javascript
fullPage.js和CSS3实现全屏滚动效果
2017/05/05 Javascript
微信小程序模板template简单用法示例
2018/12/04 Javascript
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
详解jQuery如何实现模糊搜索
2019/05/10 jQuery
JS中call()和apply()的功能及用法实例分析
2019/06/28 Javascript
vue 验证码界面实现点击后标灰并设置div按钮不可点击状态
2019/10/28 Javascript
JavaScript实现简单的图片切换功能(实例代码)
2020/04/10 Javascript
JavaScript函数重载操作实例浅析
2020/05/02 Javascript
详细分析vue表单数据的绑定
2020/07/20 Javascript
vue-cli —— 如何局部修改Element样式
2020/10/22 Javascript
[02:11]2016国际邀请赛中国区预选赛最美TA采访现场玩家
2016/06/28 DOTA
[04:10]2016国际邀请赛中国区预选赛第二日TOP10精彩集锦
2016/06/28 DOTA
python 获取et和excel的版本号
2009/04/09 Python
用python分割TXT文件成4K的TXT文件
2009/05/23 Python
Python使用PyGreSQL操作PostgreSQL数据库教程
2014/07/30 Python
python过滤字符串中不属于指定集合中字符的类实例
2015/06/30 Python
对Python中range()函数和list的比较
2018/04/19 Python
python调用摄像头显示图像的实例
2018/08/03 Python
在python中获取div的文本内容并和想定结果进行对比详解
2019/01/02 Python
详解PyTorch中Tensor的高阶操作
2019/08/18 Python
python实现身份证实名认证的方法实例
2019/11/08 Python
美国本地交易和折扣网站:LocalFlavor.com
2017/10/26 全球购物
澳大利亚买卖正宗二手奢侈品交易平台:Luxe.It.Fwd
2019/10/16 全球购物
Android面试宝典
2013/08/06 面试题
大学军训感言1500字
2014/03/09 职场文书
八一建军节营销活动方案
2014/08/31 职场文书
基层党员群众路线整改措施及努力方向
2014/10/28 职场文书
初中毕业生自我评价
2015/03/02 职场文书
入团介绍人意见范文
2015/06/04 职场文书
2016年敬老月活动总结
2016/04/05 职场文书