JavaScript-数据类型判断-typeof与-instanceof的区别

要判断数据类型-就要先知道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

猜你喜欢

转载自www.cnblogs.com/liangpi/p/12526007.html
今日推荐