判断一个js变量是否为数组
今天小编给大家整理些关于javascript判断变量是否是数组(Array)的相关知识,主要通过以下四点给大家展开话题,具体内容如下所示:
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的用法
判断一个js变量是否为数组的更多相关文章
- 一个js变量以及其作用域的源码示例
今天遇到了一个问题,抽象出来的代码如下: var zoom=13; function setZoom(){ zoom=14; } function displayZoom(){ this.setZoo ...
- 一个js 变量作用域问题
一个js 域问题,有一本书 叫 javasrcip pattert 好像是,写的很好,, <!DOCTYPE html> <html> <head lang=" ...
- 判断一个js对象是不是数组
//今天突然想到一个问题,如何判断一个对象是不是数组 var arr = [0, 1, 2]; console.log(arr) //object, 显然不行 //查阅了很多资料,发现几个挺不错的方法 ...
- JS 判断一个字符串是否包含在一个数组中
var arr = ["白色", "黑色", "红色", "粉色"]; var sel = "黑色" ...
- javascript数据变量类型判断(JS变量是否是数组,是否是函数的判断)
function isArray(o) { return Object.prototype.toString.apply(o) === “[object Array]”;}function isFun ...
- 判断一个js对象,是否具有某个属性
一个对象,想必我们关注的最多的应该是它上面的属性有哪些吧.那么,怎么判断一个对象是否具有某个属性呢? /*下面是一个对比,看看在判断是否包括一个键上面,Object结构和Set结构的写法不同.*/ / ...
- 如何判断一个js对象是否是Array
经常遇到一个问题,判断某个对象是否为数组类型,在Js中检测对象类型的常见方式有以下: typeof操作符 对于Function.String.Number.Undefined等几种类型的对象来说,几乎 ...
- 如何判断一个js对象是否一个DOM对象
我们在写js代码时有时需要判断某个对象是不是DOM对象,然后再进行后续的操作,这里我给出一种兼容各大浏览器,同时又算是比较稳妥的一种方法. 要判断一个对象是否DOM对象,首先想到的无非就是它是否具有D ...
- 判断一个js对象是否是Array
今天在做题时遇到这个问题,找答案的时候,发现评论里大神好多 . 在开发中,我们经常需要判断某个对象是否为数组类型,总结判断某个对象是否是数组的方法. 1.typeof 操作符 对于Function, ...
随机推荐
- Java初学者作业——分析计费规则后,编写程序输入乘坐出租车的时间和里程数,计算里程价格
返回本章节 返回作业目录 需求说明: 某城市的出租车计费规则如下: 在 7:00 - 23:00 之间,3km 以内收取起步价 10 元,超过 3km 每 km 收取 2 元. 如果不在这个时间段,在 ...
- 为什么说DI解耦
为什么说IOC/DI(控制反转/依赖注入)降低耦合 public class HomeController : Controller { private readonly IStudentRepons ...
- centos7.5上安装go1.13.4
一.安装 1.下载go1.13.4.linux-amd64.tar.gz 先进入官网https://golang.google.cn/ 再 https://golang.google.cn/doc/i ...
- vert.x框架-使用spring注解功能
1.前言 习惯了spring注解风格,方便好用,现在用vert.x框架,怎么使用spring注解呢? 2.maven安装依赖包 <!--spring注解依赖包--> <depende ...
- Linux上天之路(十三)之系统进程管理
主要内容 进程介绍 进程管理 进程优先级 1. 进程介绍 Linux系统中的几乎任何行动都会以进程的形式进行.如果你用网络浏览器查看网页,浏览器就作为进程运行.如果键入bash shell的命令行,这 ...
- Maven+ajax+SSM实现删除
转载自:https://www.cnblogs.com/kebibuluan/p/9020381.html 3.尚硅谷_SSM高级整合_使用ajax操作实现删除的功能 点击删除的时候,要删除联系人,这 ...
- nuxt中iview按需加载配置
在plugins/iview.js中修改 初始代码如下 import Vue from 'vue' import iView from 'iview' import locale from 'ivie ...
- 聊聊同步、异步、阻塞、非阻塞以及IO模型
前言 在使用Netty改造手写RPC框架的时候,需要给大家介绍一些相关的知识,这样很多东西大家就可以看明白了,手写RPC是一个支线任务,后续重点仍然是Kubernetes相关内容. 阻塞与非阻塞 同步 ...
- 灵雀云新一期DevOps认证培训圆满结束,下期学员招募同步开启
近日,灵雀云最新一期EXIN DevOps认证培训在北京圆满结束,来自某知名运营商领域ISV的近40名学员以百分百的通过率为此次培训画上圆满的句号. 灵雀云是国内首家在DevOps培训领域与EXIN合 ...
- MySQL提权之udf提权(获得webshell的情况)
什么是udf提权? MySQL提供了一个让使用者自行添加新的函数的功能,这种用户自行扩展函数的功能就叫udf. 它的提权原理也非常简单!即是利用了root 高权限,创建带有调用cmd的函数的udf.d ...