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 相关文章推荐
LABjs、RequireJS、SeaJS的区别
Mar 04 Javascript
多个$(document).ready()的执行顺序实例分析
Jul 26 Javascript
js简单抽奖代码
Jan 16 Javascript
jQuery通过扩展实现抖动效果的方法
Mar 11 Javascript
基于jQuery下拉选择框插件支持单选多选功能代码
Jun 07 Javascript
jQuery UI Bootstrap是什么?
Jun 17 Javascript
ES6中Proxy代理用法实例浅析
Apr 06 Javascript
基于JavaScript表单脚本(详解)
Oct 18 Javascript
js限制input只能输入有效的数字(第一个不能是小数点)
Sep 28 Javascript
js前端如何写一个精确的倒计时代码
Oct 25 Javascript
如何构建一个Vue插件并生成npm包
Oct 26 Javascript
react antd表格中渲染一张或多张图片的实例
Oct 28 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调用三种数据库的方法(3)
2006/10/09 PHP
php获取CSS文件中图片地址并下载到本地的方法
2014/12/02 PHP
微信公众号开发之文本消息自动回复php代码
2016/08/08 PHP
thinkphp分页实现效果
2016/10/13 PHP
php导出csv文件,可导出前导0实例代码
2016/11/16 PHP
php中final关键字用法分析
2016/12/07 PHP
PHP 实现字符串翻转(包含中文汉字)的实现代码
2017/04/01 PHP
Laravel框架Eloquent ORM修改数据操作示例
2019/12/03 PHP
extjs grid设置某列背景颜色和字体颜色的方法
2010/09/03 Javascript
JavaScript.The.Good.Parts阅读笔记(一)假值与===运算符
2010/11/16 Javascript
jquery入门——事件机制之事件中的冒泡现象示例解释
2020/09/12 Javascript
基于JavaScript实现继承机制之原型链(prototype chaining)的详解
2013/05/07 Javascript
Js Jquery创建一个弹出层可加载一个页面
2014/05/08 Javascript
JavaScript异步回调的Promise模式封装实例
2014/06/07 Javascript
js实现大转盘抽奖游戏实例
2015/06/24 Javascript
jQuery自动完成插件completer附源码下载
2016/01/04 Javascript
Bootstrap模态对话框的简单使用
2016/04/29 Javascript
JavaScript构建自己的对象示例
2016/11/29 Javascript
jquery mobile移动端幻灯片滑动切换效果
2020/04/15 Javascript
vue如何实现observer和watcher源码解析
2017/03/09 Javascript
使用 Node.js 对文本内容分词和关键词抽取
2017/05/27 Javascript
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
2017/08/24 Javascript
对node.js中render和send的用法详解
2018/05/14 Javascript
JS实现获取毫秒值及转换成年月日时分秒的方法
2018/08/15 Javascript
移动端如何用下拉刷新的方式实现上拉加载
2018/12/10 Javascript
nodejs中实现用户注册路由功能
2019/05/20 NodeJs
JavaScript实现的联动菜单特效示例
2019/07/08 Javascript
vue动态设置路由权限的主要思路
2021/01/13 Vue.js
[44:22]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第一场 11.01
2020/11/02 DOTA
使用pandas的DataFrame的plot方法绘制图像的实例
2018/05/24 Python
基于python实现上传文件到OSS代码实例
2020/05/09 Python
CSS实现限制字数功能当对象内文本溢出时显示省略标记
2014/08/20 HTML / CSS
实例讲解HTML5的meta标签的一些应用
2015/12/08 HTML / CSS
路政管理专业个人自荐信范文
2013/11/30 职场文书
阿凡达观后感
2015/06/10 职场文书
Django框架之路由用法
2022/06/10 Python