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 相关文章推荐
子窗口、父窗口和Silverlight之间的相互调用
Aug 16 Javascript
jQuery客户端分页实例代码
Nov 18 Javascript
JavaScript匿名函数用法分析
Feb 13 Javascript
三分钟带你玩转jQuery.noConflict()
Feb 15 Javascript
详解Angular2组件之间如何通信
Jun 22 Javascript
node.js之基础加密算法模块crypto详解
Sep 11 Javascript
浅谈KOA2 Restful方式路由初探
Mar 14 Javascript
vue 实现小程序或商品秒杀倒计时
Apr 14 Javascript
vue多页面项目中路由使用history模式的方法
Sep 23 Javascript
js模拟实现烟花特效
Mar 10 Javascript
带你使用webpack快速构建web项目的方法
Nov 12 Javascript
TS 类型收窄教程示例详解
Sep 23 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
深入密码加salt原理的分析
2013/06/06 PHP
php商品对比功能代码分享
2015/09/24 PHP
PHP基本语法实例总结
2016/09/09 PHP
JavaScript使用prototype定义对象类型
2007/02/07 Javascript
jquery 图片截取工具jquery.imagecropper.js
2010/04/09 Javascript
原生javascript获取元素样式属性值的方法
2010/12/25 Javascript
jquery解析xml字符串简单示例
2014/04/11 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
2014/11/28 Javascript
NodeJS学习笔记之MongoDB模块
2015/01/13 NodeJs
一看就懂:jsonp详解
2015/06/01 Javascript
Nodejs初级阶段之express
2015/11/23 NodeJs
jquery设置表单元素为不可用的简单代码
2016/07/04 Javascript
vue2.0 自定义日期时间过滤器
2017/06/07 Javascript
Vue实例中生命周期created和mounted的区别详解
2017/08/25 Javascript
vue router学习之动态路由和嵌套路由详解
2017/09/21 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
2017/11/01 Javascript
让bootstrap的carousel支持滑动滚屏的实现代码
2017/11/27 Javascript
Vue的事件响应式进度条组件实例详解
2018/02/04 Javascript
Vue-路由导航菜单栏的高亮设置方法
2018/03/17 Javascript
vue-cli3搭建项目的详细步骤
2018/12/05 Javascript
JS实现的贪吃蛇游戏案例详解
2019/05/01 Javascript
vue实现带复选框的树形菜单
2019/05/27 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
2020/04/25 Javascript
Python中实现对list做减法操作介绍
2015/01/09 Python
Python基础教程之浅拷贝和深拷贝实例详解
2017/07/15 Python
Python文件常见操作实例分析【读写、遍历】
2018/12/10 Python
Django media static外部访问Django中的图片设置教程
2020/04/07 Python
HTML5 Canvas中绘制椭圆的4种方法
2015/04/24 HTML / CSS
PHP中如何创建和修改数组
2012/05/02 面试题
汽车专业毕业生自荐信
2013/11/03 职场文书
《棉鞋里的阳光》教学反思
2014/04/24 职场文书
求职简历自荐信
2014/06/18 职场文书
普宁寺导游词
2015/02/04 职场文书
公司文体活动总结
2015/05/07 职场文书
基督教追悼会答谢词
2015/09/29 职场文书
Go 中的空白标识符下划线
2022/03/25 Golang