JavaScript检测类型

来源:互联网 发布:北京网络约车新规 编辑:程序博客网 时间:2024/05/17 06:15

由于刚才参加了一个公司的在线笔试,在检测类型这方面出了点小乱子,所以写篇文章做个笔记。


typeof操作符


ES有五种简单的数据类型:Undefined,Null,Boolean,Number和String,还有一种复杂的数据类型Object。对一个值使用typeof操作符可能返回下列某些字符串:
  1. “undefined”——如果这个值未定义;
  2. “boolean”——如果这个值是布尔值;
  3. “string”——如果这个值是字符串;
  4. “number”——如果这个值是数值;
  5. “object”——如果这个值是对象或null;
  6. “function”——如果这个值是函数。
以下是使用typeof的例子:

var arr = [];
var str = 'string';var num = 100;var fun = function() { console.log('this is a test.');};var obj = {};var nothing;var bool = true;console.log(typeof arr); // objectconsole.log(typeof str); // stringconsole.log(typeof num); // numberconsole.log(typeof fun); // fucntionconsole.log(typeof obj); // objectconsole.log(typeof nothing); // undefinedconsole.log(typeof bool); // boolean

由上可知,typeof对于Object、Array、Null都会返回对象,同时,在Safari及之前的版本、Chrome7及之前的版本对正则表达式使用typeof操作符时会返回“function”,而其他浏览器在这种情况下会返回“object”。另外,在使用typeof操作符时,也可当其为函数一样使用,例如typeof(90);返回“number”。

instanceof操作符


typeof操作符能够很好的检测出String、Number、Boolean、Undefined的值,但是对于Object和Array(实际上Array也是一种对象),那么就无法很好地检测出来了。instanceof操作符能够检测某个实例是否是某个特定对象的实例,以下是其使用方法:


var Object1 = function() {  this.name = 'paper_crane';  this.age = 22;}var Object2 = function() {  this.name = 'paperCrane';  this.school = 'sysu';}var arr = [];var obj1 = new Object1();var obj2 = new Object2();console.log(obj1 instanceof Object)console.log(obj1 instanceof Object1); // trueconsole.log(obj1 instanceof Object2); // trueconsole.log(obj2 instanceof Object2); // trueconsole.log(obj2 instanceof Object1); // trueconsole.log(arr instanceof Array);    // trueconsole.log(null instanceof Object);  // false


由上面的示例可以看出,instanceof操作符能够判断一个实例的类型,但是这个函数也有其缺陷:它假定只有一个全局执行环境。如果网络中包含过个框架,那么实际上就存在两个以上不同的全局执行环境,从而存在两个以上不同版本的Array构造函数。此时,检测是都是数组类型的最好方法是使用Array.isArray(params)函数,可以准确的检测其是否是数组。

0 0