JS 中对变量类型的五种判断方法

5种基本数据类型:undefined、null、boolean、unmber、string

复杂数据类型:object、

object:array、function、date等

方法一:使用typeof检测

当需要变量是否是number,string,boolean

,function,undefined,json类型时,可以使用typeof进行判断;其他变量是判断不出类型的,包括null。

typeof是区分不出array和json类型的,因为使用typeof这个变量时,array和json类型输出的都是object

方法二:使用instance检测

在 JavaScript 中,判断一个变量的类型尝尝会用 typeof 运算符,在使用 typeof 运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,它都返回 “object”。ECMAScript 引入了另一个 Java 运算符 instanceof 来解决这个问题。instanceof 运算符与 typeof 运算符相似,用于识别正在处理的对象的类型。与 typeof 方法不同的是,instanceof 方法要求开发者明确地确认对象为某特定类型

instanceof还能检测出多层继承的关系,例如:

function Person(){

}

function Student(){

}

Student.prototype = new Person();

var John = new Student();

console.log(John instanceof Student); // true

console.log(John instancdof Person);  // true

因为js中没有Undefined和Null的这种全局类型,他们und和nul都属于Object类型,因此输出了true。

方法三:使用constructor检测

constructor本来是原型对象上的属性,指向构造函数。但是根据实例对象寻找属性的顺序,若实例对象上没有实例属性或方法,就去原型链上寻找,因此,实例对象也是能使用constructor属性的

因为undefined和null没有constructor属性,所以不能使用constructor判断

看下面的例子:

function Person(){

}

function Student(){

}

Student.prototype = new Person();

var John = new Student();

console.log(John.constructor==Student); // false

console.log(John.constructor==Person);  // true

在上面的例子中,Student原型中的constructor被修改指向到Person,导致检测不出实例对象John真实的构造函数

同时,使用instaceof和construcor,被判断的array必须是在当前页面声明的!比如,一个页面(父页面)有一个框架,框架中引用了一个页面(子页面),在子页面中声明了一个array,并将其赋值给父页面的一个变量,这时判断该变量,Array == object.constructor;会返回false;

原因:

1、array属于引用型数据,在传递过程中,仅仅是引用地址的传递。

2、每个页面的Array原生对象所引用的地址是不一样的,在子页面声明的array,所对应的构造函数,是子页面的Array对象;父页面来进行判断,使用的Array并不等于子页面的Array;切记,不然很难跟踪问题!

方法四:使用Object.prototype.toString.call

Object.prototype.toString.call(变量)输出的是一个字符串,字符串里有一个数组,第一个参数是Object,第二个参数就是这个变量的类型,而且,所有变量的类型都检测出来了,我们只需要取出第二个参数即可。或者可以使用Object.prototype.toString.call(arr)=="object Array"来检测变量arr是不是数组。

方法五:jquery中$.type的实现

jquery中就是用Object.prototype.toString.call实现的,把‘[object Boolean]‘类型转成‘boolean‘类型并返回

时间: 2024-10-10 20:47:35

JS 中对变量类型的五种判断方法的相关文章

JS 中对变量类型的判断

总结:1. 一般简单的使用 typeof 或 instanceof 检测(这两种检测的不完全准确)          2. 完全准确的使用 原生js中的 Object.prototype.toString.call  或 jquery中的 $.type 检测 在 JS 中,有 5 种基本数据类型和 1 种复杂数据类型,基本数据类型有:Undefined, Null, Boolean, Number和String:复杂数据类型是Object,Object中还细分了很多具体的类型,比如:Array,

js中的变量类型

js 中输出定义变量的类型  typeof  变量名. var u:  --underfined类型 var s = "你是一个好人":   --string类型 var n = 10;   --number类型 var  num = NaN;  --number 类型,not a number. var  n = null:   -- object类型 var d = new Date();   --时间 var a = new Array();   --数组

JS中各种变量类型在条件判断为false的情况

var a = undefined; ->false var a = 0; ->false var a = 0.0; ->false var a = NaN; ->false var a = ""; ->false var a = null; ->false var a = false; ->false var a ->false function a(){ }; //调用无返回值的函数,默认返回值是undefined a() ->

sql注入过程中后台数据库类型的三种判断方式

后台数据库类型判断: 一.通过页面返回的报错信息,一般情况下页面报错会显示是什么数据库类型,在此不多说: 二.通过各个数据库特有的数据表来判断: 1.mssql数据库 http://127.0.0.1/test.php?id=1 and (select count(*) from sysobjects)>0 and 1=1 2.access数据库 http://127.0.0.1/test.php?id=1 and (select count(*) from msysobjects)>0 an

JS中的变量和输入输出

一.使用JS的三种方式 1.在HTML标签中,直接内嵌JS(并不提倡使用) <button onclick="alert('点你咋地')">点我</button> >>> 不符合w3c关于内容与行为分离的要求 2.在HTML页面中使用<script></script>包裹JS代码 <script type="text/javascript"> //JS代码 </script>

【Linux】shell编程之给变量赋值的五种方法

1.  Shell中的变量类型 Shell中的变量可以分为环境变量.位置变量.预定义的特殊变量以及用户自定义变量. <!--[if !supportLists]-->2.  <!--[endif]-->环境变量 Shell中的环境变量是一类Shell预定义变量,是用于设置系统运行环境的变量,环境变量由系统统一命名.部分系统变量的值由系统设定,部分环境变量的值可以由用户给定. 环境变量的名称由大写字母组成,常用的Shell环境变量如下所示: HOME: 用户主目录的全路径名,cd $

JavaScript入门:003—JS中的变量

编程语言都是相同的,JS中也是有变量的.首先JS的变量是区分大小写的,这个需要注意,比如number和Number是不同的变量.不管是常用类型的,还是对象类型,比如 Object obj和Object Obj是两个对象.然后是对变量赋值,这个基本都一样,可以先声明再赋值, var i; i=0; 也可以声明时赋值, var i=2; 而变量如果你不重新赋值,它是不会改变的,比如 var i=2: var i; 因为i没有重新赋值,所以i还是2.而对于对象变量则比较有意思,不需要向那些java,c

js中常用追加元素的几种方法:append,appendTo,after,before,insertAfter,insertBefore,appendChild

js中常用追加元素的几种方法,点击下面每个按钮,即可查看效果 我是第一个子元素 我是第二个子元素 append appendTo prepend prependTo after before appendChild insertAfter insertBefore

时间、金钱在java、数据库中的变量类型之总结

在编写程序时,总是有些变量的类型搞不很明白,现将目前涉及到的变量总结一下: 1.“时间”类型 (1).在数据库中的变量类型是:DateTime 比如: operateTime DATETIME,//数据库中编写的字段类型 (2).在java程序中的变量类型是:Date 比如: private Date operatetime;// 操作时间 //set.get方法 public Date getOperatetime() { return operatetime; } public void s