前言
既然学习了JavaScript,那一定要会检测数据类型。但是检测数据类型的方法不止一种,并且每种方法判断的数据类型也有局限性。所以接下来,为大家总结一下。
分别是typeof,instanceof,constructor。
一、typeof
typeof返回值是一个字符串,该字符串说明运算数的类型。返回结果只有以下几种number,string,boolean,object,undefined,function
无法判断object,array,null
,因为返回的是object
//1、数字类型
console.log(typeof 1); //number
//2、字符串类型
console.log(typeof '123'); //string
//3、布尔类型
console.log(true); //true
//4、数组,对象,null
var arr = []
console.log(typeof arr); //object
var obj = {}
console.log(typeof obj); //object
console.log(typeof null); //object
//5、函数
function fn(){}
console.log(typeof fn); //function
二、instanceof
instanceof是用来判断数据是否是某个对象的实例,返回一个布尔值false,true
<div></div>
function Phone(name, color, play) {
this.name = name
this.color = color
this.play = play
}
var phone = new Phone('oppo', 'red', function () { console.log('玩'); })
console.log(phone instanceof Object);
console.log(document.getElementsByTagName('div')[0] instanceof Object);
console.log(window instanceof Object);
var obj = {}
console.log(obj instanceof Object);
console.log(new Date() instanceof Object);
var arr = []
console.log(arr instanceof Object);
var fun = function () { }
console.log(fun instanceof Object);
不过这个方法有一个缺点,就是不能直接判断null
和undefined
因为原型链继承的关系,instanceof会把数组都识别为Object对象。
另外基本数据类型不是object,而引用数据卡类型是object。
三、constructor
任何对象都有constructor属性。
//创建一个函数
var fun = function () {
}
// 判断数据类型 constructor
console.log(fun.constructor); // Function() { [native code] }
var num = 10
console.log(num.constructor == Object); // false
缺点:该方法只能判断是否是对象。
总结
以上就是今天的内容