JavaScript 类型检测

本文主要探讨了JavaScript中类型检测的两种灵活方法:利用Constructor属性和toString方法。通过constructor属性可以检测对象、数组和函数等复合类型,同时指出undefined和null的特殊情况。另外,文章介绍了toString方法,它返回对象的Class字符串,可用于更准确地识别不同类型,如object、array、function等。文章还提供了实例设计,展示如何结合这些方法实现更安全、强健的类型检测。
摘要由CSDN通过智能技术生成

在这里插入图片描述
上篇文章《js 6种数据类型》https://blog.csdn.net/weixin_44793212/article/details/103192941

上篇讲述了 typeof 运算符 ,使它可以检测基本数据类型,但是typeof有很多局限性,
本章介绍两种更灵活的使用方法:

使用 Constructor

👶知识点1

constructor 是 object 类型的原型属性,它能够返回当前对象的构造器(类型函数)。利用该属性,可以检测复合型数据的类型,如对象、数组和函数等。

实例设计

【实例 1】下面代码可以检测对象和数组的类型,可以用于过滤对象、数组。

var o = { }var a =[ ];
if (o.constructor == object) document.write ("o是对象")if (a.constructor == Array) document.write('a是数组')

结合 typeof 运算符和 constructor 原型属性,可以检测不同类型的数据,常用数据类型和检测结构如下列表:
在这里插入图片描述

【实例 2】undefined 和 null 没有 constructor 属性,不能够直接读取,否则会抛出异常。因此,一般应先检测值是否未为undefined 和null 等特殊值 然后再调用 constructor 属性。

var value = undefined;
console.log (value && value.constructor);		//返回undefined
var value = null;
console.log (value && value.constructor);		//返回null
数值直接量也不能直接读取 constructor 属性, 应该先把它转换为对象再调用:
console.log (10.constructor);			//抛出异常
console.log (10.constructor);			//返回number 类型
console.log (number(10.constructor);	//返回number 类型

第一种灵活方法完!!

2.使用 toString

👴知识点2

在对象上调用 object 的原型方法 tostring(),就会返回统一格式的字符串表示。例如:


vartostring=Object.prototype.toString:

//使用appy方法在对象上动态调用objet的原型方法tostringO)

console.log( toString. apply(o))//表示为”[object object]

console.log(tostring.apply(a))//表示为”[object array]



console.log(tostring.apply(f))//表示为”[object function]





仔细分析不同类型对象的方法返回值,会发现由的原型方法直选符串的格式如下:
[tobject Class]

其中 object 表示对象的基本类型,class表示对象的子类型,子类型的名称与该对象的结构函数名一一对应

例如 object 对象的 Class 为 object ,array 对象的 Class 为 array ,function对象的Class为 function ,date 对象的class 为 date ,math 对象的 class 为 math等

宿主对象也有预定的Class值,如window、document和Fom等。用户自定义的对象的class为object

。用户自定义的类型,可以根据这个格式自定义类型表示。

Class 值提供的信息与 constructor 属性值都能够检测数据类型,但是Class 值是以字符串的形式提供

这些信息,这在开发环境中是非常有用的。而使用typeof运算符进行类型检测,由于其返回的字符串表

示比较有限,无法准确分辨Object、Function和Array等类型。

实例设计

设计 typeof 方法,利用其返回的数据类型的字符串表示,可以设计一种更安全。更强健的类型检测方法

function typeof (obj){
	var str = object.prototype.tostring.call(obj);
	return str.match(/\[object (.*?)\]/) [1].tolowercase ();
	};
	console.log( typeof ({}) );			//object
	console.log( typeof ([]) );			//array
	console.log( typeof (0) );			//number
	console.log( typeof (null) );		//null
	console.log( typeof (undefined) );	//undefined
	console.log( typeof (/ /) );			//regex
	console.log( typeof (new date) );	//date

在上面检测的函数种,模拟 typeof 运算符的返回值格式,设计所有类型返回的字符串表示都已小写的单个词来表示

再typefo()方法的基础上扩展方法,专门检测某种类型数据

完结!!
作者:在校生记录博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值