JavaScript中教你如何判断数据类型

JavaScript判断数据类型

前两天的文章中有介绍到JavaScript中的数据类型,那么今天就总结一下判断数据类型的方式吧!

1. typeof

用于判断基本数据类型和引用数据类型

console.log(typeof 123);  //number
console.log(typeof '123');  //string
console.log(typeof true);   //boolean
console.log(typeof null);  //object
console.log(typeof undefined);  //undefined
console.log(typeof Symbol());  //symbol
console.log(typeof [1,2,3]);  //object
console.log(typeof {a:1});   //object

需要注意的地方是 null,通过typeof判断null的时候,会返回object,这是由于历史原因造成的,属于一个bug,1995年JavaScript语言的第一版,所有值都设计成32位,其中最低的3位用来表述数据类型,object对应的值是000。当时,只设计了五种数据类型(对象、整数、浮点数、字符串和布尔值),完全没考虑null,只把它当作object的一种特殊值,32位全部为0。这是typeof null返回object的根本原因。

2. instanceof

用于检测构造函数的prototype属性是否出现在某个实例对象的原型链上,不能判断基本数据类型,返回布尔值的形式

console.log([1,2,3] instanceof Array); //true
console.log({a:1} instanceof Object); //true
console.log(Symbol instanceof Function); //true

instanceof的内部实现也是一个常考到的面试题目,面试官会让你手动实现一个instanceof

function myInstanceOf(target,origin){
	let proto = target.__proto__;
	if(proto){
		if(origin.prototype == proto){
			return true;
		}else{
			return myInstanceOf(proto,origin);
		}
	}else{
		return false;
	}
}

3. constructor

返回创建此对象的数组函数的引用
缺陷:如果先创建一个对象,更改它的原型之后创建该对象的实例,这种方式就不可靠了

4. Object.prototype.toString.call()

返回一个字符串,字符串是一个数组的形式,数组的第二个参数就是变量类型

console.log(Object.prototype.toString.call([1,2,3]));  //[object Array]
console.log(Object.prototype.toString.call('1,2,3'));  //[object String]
console.log(Object.prototype.toString.call(null));    //[object Null]
console.log(Object.prototype.toString.call(undefined));  //[object Undefined]
console.log(Object.prototype.toString.call(111));   //[object Number]
console.log(Object.prototype.toString.call(Symbol()));  //[object Number]
console.log(Object.prototype.toString.call({a:1}));  //[object Object]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值