javascript 中检测数据类型的方法
typeof 检测数据类型
javascript 中检测数据类型有好几种,其中最简单的一种是 typeof 方式。typeof 方法返回的结果是一个字符串。typeof 的用法如下:
typeof value;
typeof 返回的结果有以下几个:"boolean","string","object","undefined","number";
下面是一些示例代码:
var str = "alice"; console.log(typeof str);//返回结果是 "string" var flag = true; console.log(typeof flag);//返回结果是 "boolean" var count = 1; console.log(typeof count);//返回结果是 "number" var undefinedValue = undefined; console.log(undefinedValue); //返回结果是 "undefined" var nullValue = null; console.log( typeof nullValue);//返回结果 "object" console.log(typeof []);//返回结果 “object” console.log(typeof /^1$/);//返回结果 "object"
示例代码中我们发现,使用 typeof 方法并不能知道一个对象的具体类型。如: typoef [] 和 typeof /^1$/ 返回的结果都是 object,并不能知道两者一个数组,一个是个正则,也就是不知道一个对象具体是什么类型的对象。
instanceof 检测数据类型
为此,javascript 提供了 instanceof 操作符,其语法结构如下:
var result = value instanceof constructor;【注意:这里 constructo 代指的是某个构造函数】
返回结果是一个布尔值。如果结果 true,表示 value 是由 构造函数 constructor 创建,false 则表示 value 不是由构造函数 constructor 创建。
下面是示例代码:l
console.log([] instanceof Array);//true console.log( {} instanceof Object);//true console.log(/^1$/ instanceof RegExp);//true
同时,instanceof 检测继承类型,只要检测的类型在数据的原型链上,结果都会返回 true;比如:
function Animal() {} function Dog(name) { this.name = name; } Dog.prototype = new Animal; Dog.prototype.type = "dog"; Dog.prototype.constructor = Dog; var dog = new Dog('donald'); console.log(dog instanceof Dog);//true console.log(dog instanceof Animal);//true Animal 的原型在 dog 的原型链上,所以返回结果也为 true