javascript 判断变量是否是数组(Array)
过完春节又有好多人寻找新的机会,旁边的人面试完就会分享一些问题,明明会的但是面试的时候,想不全,面试官不满意...这个懊恼的行为,今天的文章跟大家分享下:javascript如何判断便是是数组。
1. typeof真的那么厉害吗??
//首先看代码
var ary = [1,23,4];
console.log(typeof ary); //输出结果是Object
上面的办法并不能实时的检测出是否是数组,只能判断其类型,所以说typeof判断基本类型数据还是挺好的,但是不能准确测试出是否是数组(typeof的具体用法以后提及,现在回归正题)
2.instanceof 判断
var ary = [1,23,4];
console.log(ary instanceof Array)//true;
从输出的效果来看,还是挺令人满意的,能准确的检测出数据类型是否是数组,不要高兴的太早,大家先想想这个的缺点,我们接着说第三种方法
3.原型链方法
var ary = [1,23,4];
console.log(ary.__proto__.constructor==Array);//true
console.log(ary.constructor==Array)//true 这两段代码是一样的
这个办法开起来好高大上哦~~,利用了原型链的方法,但是但是,这个是有兼容的哦,在IE早期版本里面__proto__
是没有定义的哦~而且,这个仍然有局限性,我们现在就来总结一下第2种方法和第3种方法局限性
总结一下第2种方法和第3种方法局限性
instanceof 和constructor 判断的变量,必须在当前页面声明的,比如,一个页面(父页面)有一个框架,框架中引用了一个页面(子页面),在子页面中声明了一个ary,并将其赋值给父页面的一个变量,这时判断该变量,Array == object.constructor;会返回false;
原因:
1、array属于引用型数据,在传递过程中,仅仅是引用地址的传递。
2、每个页面的Array原生对象所引用的地址是不一样的,在子页面声明的array,所对应的构造函数,是子页面的Array对象;父页面来进行判断,使用的Array并不等于子页面的Array;切记,不然很难跟踪问题!
4.通用的方法
var ary = [1,23,4];
function isArray(o){
return Object.prototype.toString.call(o)=='[object Array]';
}
console.log(isArray(ary));
具体Object.prototype.toString 的用法,请参照Object.prototype.toString的用法
今天总结这四种,算是三种吧,typeof是为了引出后面的instanceof,当然总结这四种也是参考了网上的一些意见,如果不妥之处,请多指正~~希望和各位多多交流~
5、追加一种新的方法 Array.isArray(arg);
因为是新添加的,在不支持的浏览器上可能有兼容性,用的时候需要兼容下不支持的浏览器,这个时候就要结合第4中方法了
if(!Array.isArray){
Array.isArray = function(arg){
return Object.prototype.toString.call(arg)==='[object Array]'
}
}
而且此方法可以支持iframe判断是否是数组,其实是第四中的变形
再多的方法也需要撸码来加强用法和经验,前端们赶紧撸码记忆吧....
javascript 判断变量是否是数组(Array)的更多相关文章
- JavaScript判断变量是否为数组的方法(Array)
废话不多说直接上一个代码: 1.这里是通用的检测方法 /* * 判断是否是数组 */ function isArray(obj){ return Object.prototype.toString.c ...
- JavaScript判断变量数据类型
一.JS中的数据类型 1.数值型(Number):包括整数.浮点数. 2.布尔型(Boolean) 3.字符串型(String) 4.对象(Object) 5.数组(Array) 6.空值(Null) ...
- Javascript 判断变量类型的陷阱 与 正确的处理方式
Javascript 由于各种各样的原因,在判断一个变量的数据类型方面一直存在着一些问题,其中最典型的问题恐怕就是 typeof null 会返回 object 了吧.因此在这里简单的总结一下判断数据 ...
- javascript判断变量是否为空的方法
javascript判断字符串变量是否为空的方法代码如下<pre> if (typeof(ndesc)=="undefined" || ndesc=='' || nde ...
- JavaScript判断变量名是否存在数组中
直接上代码: JavaScript代码: var array=[{name:"张珊",sex:"男"}]; console.log(array); if(arr ...
- javascript判断变量是不是空值
JavaScript本身没有判断一个变量是不是空值的函数,因为变量有可能是string,object,number,boolean等类型,类型不同,判断方法也不同.所以在文章中写了一个函数,用以判断J ...
- 关于Javascript判断变量是否为空
如何判断Javascript对象是否存在 原文网址:http://www.ruanyifeng.com/blog/2011/05/how_to_judge_the_existence_of_a_glo ...
- JavaScript判断变量类型
使用JavaScript变量时是无法判断出一个变量是0 还是“”的 这时可用typeof()来判断变量是string 还是number来区分0和“”, typeof(undefined) == 'un ...
- 原生js 判断变量是一个数组
const arr = [] // 1. 最简单 ES5+ Array.isArray(arr) // 2. 兼容性好的方法,也很准确 Object.prototype.toString.call(a ...
随机推荐
- 如何为k8s中的pod配置QoS等级?
1.概述 本文介绍如何为pod分配特定的QoS等级. 我们知道,在k8s的环境中,通过使用QoS等级来做决定,在资源紧张的时候,将哪些的pod进行驱逐,或者说如何对pod进行调度. OK,话不多说,让 ...
- 2022年官网下安装RedisDesktopManager最全版与官网查阅方法
目录 安装部署RedisDesktopManager 一.下载安装 1.浏览器输入网址:https://github.com/ ,输入搜索条件,找到如图,双击 2.滑动浏览器找到如图位置,双击 3.滑 ...
- Ribbon&OpenFeign配置使用
目录 Ribbon 是什么 工作流程 怎么用 负载算法 官方提供算法 使用方法 自定义负载算法 在rule包下新建MyRule 修改自定义策略类RbRule 测试 OpenFeign 是什么 怎么用 ...
- 自学java一路以来,心血心得整理分享
✿ 贴心提示:文章内容比较长,但都是干货,请大家耐心看完.时间不够充裕的小伙伴,建议收藏,一定要耐心看完,保证对你有后续学习java有所帮助. 一.推荐背景介绍 (一)我是怎么学的? ★ 非常普通的人 ...
- 13 数组 Java内存分析 三种初始化
Java内存分析 三种初始化 静态初始化 //静态初始化 创建+赋值 int[] a = {1,2,3}; Man[] mans = {new Man(1,1),new Man(2,2)}; 动态初始 ...
- git命令新建远程分支并推送,切换远程地址
最近记性不好,老是忘记操作命令,记录下一下新建远程分支和切换.删除远程地址的命令: 1.查看当前分支: git branch 2.查看所有分支:git branch -a 3.切换分支:git ch ...
- 程序设计基础·Java学习笔记·面向对象(下)
Java程序设计基础之面向对象(下) (补充了上的一些遗漏的知识,同时加入了自己的笔记的ヾ(•ω•`)o) (至于为什么分P,啊大概是为了自己查笔记方便(?)应该是("` 3′") ...
- 字符串的高级应用-char a[100] = "1+2=;3-2=;2*5=;8/4=;" 得到char a[100] ="1+2=3;3-2=1;2*5=10;8/4=2;"
1 #include<stdio.h> 2 #include<string.h> 3 4 int main() 5 { 6 char a[100] = "1+2=;3 ...
- hashlib 模块 摘要算法
应用于用户登陆,对密码进行加密操作, #文件操作 # hashlib 摘要算法 #md5 算法: 是32位的16进制组成的数字字符组成的字符串 #应用最广的摘要算法 #效率高,相对不复杂,如果只是传统 ...
- 如何做一个网站 (C# + MVC Web+ easyUI )
如何做一个网站 小编想做一个网站,采用技术为:C# + MVC Web+ easyUI 小编经过几天的学习,以及指了几位大神指导,初见效果.建立网站的思路:先列举需要用到了几个知识点,然后逐一攻克,然 ...