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 相关文章推荐
使用JavaScript switch case 另类写法
Mar 14 Javascript
javascript中typeof的使用示例
Dec 19 Javascript
javascript闭包传参和事件的循环绑定示例探讨
Apr 17 Javascript
EasyUi combotree 实现动态加载树节点
Apr 01 Javascript
Angularjs中$http以post请求通过消息体传递参数的实现方法
Aug 05 Javascript
javascript如何创建对象
Aug 29 Javascript
详解JavaScript权威指南之对象
Sep 27 Javascript
jquery点赞功能实现代码 点个赞吧!
May 29 jQuery
AngularJS 实现购物车全选反选功能
Oct 24 Javascript
详解在Angular4中使用ng2-baidu-map的方法
Jun 19 Javascript
layui使用templet格式化表格数据的方法
Sep 16 Javascript
微信小程序文章详情功能完整实例
Jun 03 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
使用MaxMind 根据IP地址对访问者定位
2006/10/09 PHP
多php服务器实现多session并发运行
2006/10/09 PHP
Laravel框架学习笔记(一)环境搭建
2014/10/15 PHP
PHP+MySQL修改记录的方法
2015/01/21 PHP
PHP基于单例模式编写PDO类的方法
2016/09/13 PHP
浅谈PHP安全防护之Web攻击
2017/01/03 PHP
php获取ip及网址的简单方法(必看)
2017/04/01 PHP
再谈javascript面向对象编程
2012/03/18 Javascript
使用jquery选择器如何获取父级元素、同级元素、子元素
2014/05/14 Javascript
jquery实现多行文字图片滚动效果示例代码
2014/10/10 Javascript
JS 实现列表与多选框选择附预览动画
2014/10/29 Javascript
全面解析bootstrap格子布局
2016/05/22 Javascript
JS数组交集、并集、差集的示例代码
2017/08/23 Javascript
Vue2.0父子组件传递函数的教程详解
2017/10/16 Javascript
微信小程序调用摄像头隐藏式拍照功能
2018/08/22 Javascript
Vue动态面包屑功能的实现方法
2019/07/01 Javascript
详解Vue 项目中的几个实用组件(ts)
2019/10/29 Javascript
使用eslint和githooks统一前端风格的技巧
2020/07/29 Javascript
关于Vue中$refs的探索浅析
2020/11/05 Javascript
[48:28]完美世界DOTA2联赛循环赛FTD vs Magma第二场 10月30日
2020/10/31 DOTA
用python实现批量重命名文件的代码
2012/05/25 Python
Python3.2模拟实现webqq登录
2016/02/15 Python
基于python的字节编译详解
2017/09/20 Python
python实现手机通讯录搜索功能
2018/02/22 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
HTML5在canvas中绘制复杂形状附效果截图
2014/06/23 HTML / CSS
Canvas在超级玛丽游戏中的应用详解
2021/02/06 HTML / CSS
创建索引时需要注意的事项
2013/05/13 面试题
策划总监岗位职责
2014/02/16 职场文书
《逃家小兔》教学反思
2014/02/23 职场文书
十佳中学生事迹材料
2014/06/02 职场文书
中小学生学籍证明
2014/10/25 职场文书
亚布力滑雪场导游词
2015/02/09 职场文书
2015年家长学校工作总结
2015/04/22 职场文书
关于运动会的广播稿
2015/08/19 职场文书
小学教师教学反思
2016/02/24 职场文书