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 08 Javascript
扩展js对象数组的OrderByAsc和OrderByDesc方法实现思路
May 17 Javascript
Node.js中创建和管理外部进程详解
Aug 16 Javascript
jQuery中parents()方法用法实例
Jan 07 Javascript
JS+CSS实现的经典圆角下拉菜单效果代码
Oct 21 Javascript
最全的Javascript编码规范(推荐)
Jun 22 Javascript
JavaScript组合模式学习要点
Aug 26 Javascript
学习Node.js模块机制
Oct 17 Javascript
Centos7 中安装 Node.js v4.4.4
Nov 03 Javascript
基于iScroll实现下拉刷新和上滑加载效果
Jul 18 Javascript
Vue.js递归组件构建树形菜单
Dec 24 Javascript
微信运维交互机器人的示例代码
Nov 12 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
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
2006/07/09 PHP
《PHP边学边教》(02.Apache+PHP环境配置――上篇)
2006/12/13 PHP
php下通过POST还是GET来传值
2008/06/05 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
2014/07/22 PHP
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
2014/10/30 PHP
php在数组中查找指定值的方法
2015/03/17 PHP
javascript英文日期(有时间)选择器
2007/05/02 Javascript
JavaScript中的new的使用方法与注意事项
2007/05/16 Javascript
javascript 表单的友好用户体现
2009/01/07 Javascript
JavaScript.Encode手动解码技巧
2010/07/14 Javascript
textarea不能通过maxlength属性来限制字数的解决方法
2014/09/01 Javascript
老司机带你解读jQuery插件开发流程
2016/05/16 Javascript
AngularJs解决跨域问题案例详解(简单方法)
2016/05/19 Javascript
Bootstrap编写导航栏和登陆框
2016/05/30 Javascript
JS结合bootstrap实现基本的增删改查功能
2016/07/22 Javascript
JavaScript计时器用法分析【setTimeout和clearTimeout】
2017/01/18 Javascript
详解Node.js串行化流程控制
2017/05/04 Javascript
JS实现求数组起始项到终止项之和的方法【基于数组扩展函数】
2017/06/13 Javascript
JavaScript实现无刷新上传预览图片功能
2017/08/02 Javascript
angular写一个列表的选择全选交互组件的示例
2018/01/22 Javascript
深入浅析Vue中的 computed 和 watch
2018/06/06 Javascript
js实现表格单列按字母排序
2020/08/12 Javascript
js实现头像上传并且可预览提交
2020/12/25 Javascript
python 获取当天每个准点时间戳的实例
2018/05/22 Python
浅述python2与python3的简单区别
2018/09/19 Python
python实现烟花小程序
2019/01/30 Python
python安装dlib库报错问题及解决方法
2020/03/16 Python
德国户外商店:eXXpozed
2020/07/25 全球购物
解释一下Windows的消息机制
2014/01/30 面试题
市级绿色学校申报材料
2014/08/25 职场文书
教师对照四风自我剖析材料
2014/09/30 职场文书
工作表扬信
2015/01/17 职场文书
教师考核鉴定意见
2015/06/05 职场文书
2016年5月份红领巾广播稿
2015/12/21 职场文书
2016个人先进事迹材料范文
2016/03/01 职场文书
2019年大学生暑期社会实践调查报告模板
2019/11/07 职场文书