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给网页更换皮肤的方法
May 30 Javascript
jquery实现触发时更新下拉列表内容的方法
Dec 02 Javascript
Vuejs第七篇之Vuejs过渡动画案例全面解析
Sep 05 Javascript
Bootstrap CSS布局之图像
Dec 17 Javascript
JavaScript实现图像模糊化的方法实例
Jan 15 Javascript
JQuery Dialog对话框 不能通过Esc关闭的原因分析及解决办法
Jan 18 Javascript
使用jQuery卸载全部事件的思路详解
Apr 03 jQuery
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
Oct 24 Javascript
webpack实现一个行内样式px转vw的loader示例
Sep 13 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
Jun 24 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
Jan 16 Javascript
bootstrap实现tab选项卡切换
Aug 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排序之二维数组的按照字母排序实现代码
2011/08/13 PHP
Laravel 前端资源配置教程
2019/10/18 PHP
深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
2013/05/08 Javascript
JavaScript中for-in遍历方式示例介绍
2014/02/11 Javascript
javascript写的一个模拟阅读小说的程序
2014/04/04 Javascript
解决jquery版本冲突的有效方法
2014/09/02 Javascript
JavaScript获取当前运行脚本文件所在目录的方法
2016/02/03 Javascript
EasyUi 打开对话框后控件赋值及赋值后不显示的问题解决办法
2017/01/19 Javascript
vue动态组件实现选项卡切换效果
2017/03/08 Javascript
AngularJS自定义指令详解(有分页插件代码)
2017/06/12 Javascript
JS实现颜色的10进制转化成rgba格式的方法
2017/09/04 Javascript
JavaScript数组push方法使用注意事项
2017/10/30 Javascript
JS实现可针对算术表达式求值的计算器功能示例
2018/09/04 Javascript
vue 动态组件用法示例小结
2020/03/06 Javascript
[36:33]Ti4 循环赛第四日 附加赛NEWBEE vs Mouz
2014/07/13 DOTA
[03:55]DOTA2完美大师赛选手传记——LFY.MONET
2017/11/18 DOTA
django通过ajax发起请求返回JSON格式数据的方法
2015/06/04 Python
Python将阿拉伯数字转换为罗马数字的方法
2015/07/10 Python
python脚本设置系统时间的两种方法
2016/02/21 Python
python3.4下django集成使用xadmin后台的方法
2017/08/15 Python
Python读取MRI并显示为灰度图像实例代码
2018/01/03 Python
基于numpy.random.randn()与rand()的区别详解
2018/04/17 Python
python动态进度条的实现代码
2019/07/03 Python
图文详解Django使用Pycharm连接MySQL数据库
2019/08/09 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
2020/06/22 Python
中国电子产品外贸网站:MiniIntheBox
2017/02/06 全球购物
国家助学金获奖感言
2014/01/31 职场文书
大二法英学生职业生涯规划范文
2014/02/27 职场文书
安全施工标语
2014/06/07 职场文书
企业宗旨标语
2014/06/10 职场文书
食堂标语大全
2014/06/11 职场文书
2014年班主任德育工作总结
2014/12/05 职场文书
婚礼父母答谢词
2015/01/04 职场文书
售后服务质量承诺书
2015/04/29 职场文书
2016年寒假社会实践活动心得体会
2015/10/09 职场文书
为什么RedisCluster设计成16384个槽
2021/09/25 Redis