要判断数据类型-就要先知道js有哪些数据类型:
主要分两类:
值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(ES6 引入了一种新的原始数据类型,表示独一无二的值)。
引用数据类型:对象(Object)、数组(Array)、函数(Function)。
常用的判断数据类型的方法:
1、typeof
首先,使用typeof看一下各个类型的输出:
<script> console.log(typeof(123)); // number console.log(typeof(true)); // boolean console.log(typeof('demo')); // string console.log(typeof(undefined)); // undefined console.log(typeof(Symbol('id'))); // symbol console.log(typeof(function(){})); // function console.log(typeof(null)); // object console.log(typeof([])); // object console.log(typeof({})); // object </script>
typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型。它返回值是一个字符串,该字符串说明运算数的类型。
从上面可以看出,使用typeof判断数据类型时,对于null、[]、{}的数据类型判断都是object。在使用 typeof 运算符时采用引用类型存储值,无论引用的是什么类型的对象,它都返回 "object"。
所以对于这些数据类型的判断得不到真实的数据类型,因此引入了instanceof
2、instanceof
与 typeof 方法不同的是,instanceof 方法要求开发者明确地确认对象为某特定类型。用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上。
用法:object(要检测的对象) instanceof constructor(某个构造函数)
// 判断 foo 是否是 Foo 类的实例 function Foo(){} var foo = new Foo(); console.log(foo instanceof Foo)//true
也可以用instanceof 在继承关系中用来判断一个实例是否属于它的父类型。
// 判断 foo 是否是 Foo 类的实例 , 并且是否是其父类型的实例 function Aoo(){} function Foo(){} Foo.prototype = new Aoo();//JavaScript 原型继承 var foo = new Foo(); console.log(foo instanceof Foo)//true console.log(foo instanceof Aoo)//true