上篇文章《js 6种数据类型》https://blog.csdn.net/weixin_44793212/article/details/103192941
上篇讲述了 typeof 运算符 ,使它可以检测基本数据类型,但是typeof有很多局限性,
本章介绍两种更灵活的使用方法:
👶知识点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()方法的基础上扩展方法,专门检测某种类型数据
完结!!
作者:在校生记录博客