欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

介绍四种判断JS数据类型的方法

程序员文章站 2023-11-13 10:31:28
1、typeof typeof 是一个操作符,其右侧跟一个一元表达式,并返回这个表达式的数据类型。返回的结果用该类型的字符串(全小写字母)形式表示,包括以下 7 种:number、boolean、s...

1、typeof

typeof 是一个操作符,其右侧跟一个一元表达式,并返回这个表达式的数据类型。返回的结果用该类型的字符串(全小写字母)形式表示,包括以下 7 种:number、boolean、symbol、string、object、undefined、function 等。

对于基本类型,除 null 以外,均可以返回正确的结果。

对于引用类型,除 function 以外,一律返回 object 类型。

对于 null ,返回 object 类型。

对于 function 返回  function 类型

2、instanceof

instanceof 是用来判断 a 是否为 b 的实例,表达式为:a instanceof b,如果 a 是 b 的实例,则返回 true,否则返回 false。 在这里需要特别注意的是:instanceof 检测的是原型。

[] instanceof array; // true

[] instanceof object; // true

从 instanceof 能够判断出 [ ].__proto__  指向 array.prototype,而 array.prototype.__proto__ 又指向了object.prototype,最终 object.prototype.__proto__ 指向了null,标志着原型链的结束。

因此,instanceof 只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型。

3、constructor

当一个函数 f被定义时,js引擎会为f添加 prototype 原型,然后再在 prototype上添加一个 constructor 属性,并让其指向 f 的引用。

当执行 var f = new f() 时,f 被当成了构造函数,f 是f的实例对象,此时 f 原型上的 constructor 传递到了 f 上,因此 f.constructor == f

细节问题:

(1). null 和 undefined 是无效的对象,因此是不会有 constructor 存在的,这两种类型的数据需要通过其他方式来判断。

(2). 函数的 constructor 是不稳定的,这个主要体现在自定义对象上,当开发者重写 prototype 后,原有的 constructor 引用会丢失,constructor 会默认为 object

4、tostring

tostring() 是 object 的原型方法,调用该方法,默认返回当前对象的 [[class]] 。这是一个内部属性,其格式为 [object xxx] ,其中 xxx 就是对象的类型。

对于 object 对象,直接调用 tostring()  就能返回 [object object] 。而对于其他对象,则需要通过 call / apply 来调用才能返回正确的类型信息。

介绍四种判断JS数据类型的方法