javascript 中检测数据类型的方法

时间:2021-10-26 20:07:55

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