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 获取Gridview选中行的内容操作步骤
Feb 05 Javascript
简介JavaScript中的sub()方法的使用
Jun 08 Javascript
基于javascript制作微博发布栏效果
Apr 04 Javascript
jQuery删除当前节点元素
Dec 07 Javascript
easyUI实现类似搜索框关键词自动提示功能示例代码
Dec 27 Javascript
工厂模式在JS中的实践
Jan 18 Javascript
DOM事件探秘篇
Feb 15 Javascript
webpack 1.x升级过程中的踩坑总结大全
Aug 09 Javascript
bootstrap3-dialog-master模态框使用详解
Aug 22 Javascript
vue的过滤器filter实例详解
Sep 17 Javascript
记一次vue去除#问题处理经过小结
Jan 24 Javascript
JS实现横向轮播图(中级版)
Jan 18 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个人网站架设连环讲(一)
2006/10/09 PHP
附件名前加网站名
2008/03/23 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
2014/06/19 PHP
JavaScript Sort 表格排序
2009/10/31 Javascript
javascript+css 网页每次加载不同样式的实现方法
2009/12/27 Javascript
javascript 静态对象和构造函数的使用和公私问题
2010/03/02 Javascript
返回对象在当前级别中是第几个元素的实现代码
2011/01/20 Javascript
js限制textarea每行输入字符串长度的代码
2012/10/31 Javascript
JavaScript创建一个欢迎cookie弹出窗实现代码
2013/03/15 Javascript
Js 时间函数getYear()的使用问题探讨
2013/04/01 Javascript
js读取配置文件自写
2014/02/11 Javascript
jquery实现的图片点击滚动效果
2014/04/29 Javascript
JavaScript实现快速排序的方法
2015/07/31 Javascript
简单实现异步编程promise模式
2015/07/31 Javascript
jQuery实现滚动切换的tab选项卡效果代码
2015/08/26 Javascript
jquery 获取select数组与name数组长度的实现代码
2016/06/20 Javascript
JavaScript 节流函数 Throttle 详解
2016/07/04 Javascript
AngularJS基础 ng-value 指令简单示例
2016/08/03 Javascript
webpack多入口文件页面打包配置详解
2018/01/09 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
2018/08/20 Javascript
详解微信小程序调用支付接口支付
2019/04/28 Javascript
详解Python的单元测试
2015/04/28 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
2016/09/19 Python
Python查询IP地址归属完整代码
2017/06/21 Python
Django自带日志 settings.py文件配置方法
2019/08/30 Python
Python代码执行时间测量模块timeit用法解析
2020/07/01 Python
英国马莎百货印度官网:Marks & Spencer印度
2020/10/08 全球购物
历史专业毕业生的自我鉴定
2013/11/15 职场文书
《雪儿》教学反思
2014/04/17 职场文书
社区巾帼文明岗事迹材料
2014/06/03 职场文书
全国优秀教师事迹材料
2014/08/26 职场文书
2014年辅导员工作总结
2014/11/18 职场文书
2015年主婚人婚礼致辞
2015/07/28 职场文书
HTML5页面音频自动播放的实现方式
2021/06/21 HTML / CSS
《传颂之物 虚伪的假面》BD发售宣传CM公开
2022/04/04 日漫
Windows10安装Apache2.4的方法步骤
2022/06/25 Servers