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

JavaScript中的数据类型以及typeof 和 instanceof

程序员文章站 2022-06-04 22:06:53
...

        在JavaScript中,把数据类型分为简单数据类型和复杂数据类型两类,简单数据类型有7种类型,分别为string、number、boolean、undefined、null、symbol和bigint;复杂数据类型有function、array和object等等,那么我们怎么准确判断数据是什么类型呢?

        关于判断数据类型,JavaScript中给我们提供了两个关键字,那就是typeof和instanceof,那么两者又有什么区分呢,什么时候用typeof,什么时候用instanceof呢?

        typeof:用来检测数据的数据类型,能判断数据属于什么类型,但是一般只能准确地判断出一些简单的数据类型,如果碰上复杂数据类型可能会有一些偏差,但是碰上null也会返回object;

        例:

const str = 'Jack'
console.log(typeof str)  //string

const num = 123
console.log(typeof num)  //number

const bol = true
console.log(typeof bol)  //boolean

const unde = undefined
console.log(typeof unde)  //undefined

const sym = Symbol('Jack')
console.log(typeof sym)  //symbol

const bigint = BigInt(555)
console.log(typeof bigint)  //bigint

const not = null
console.log(typeof not)  //object

function isfunction(){
    console.log(typeof isfunction)  //function
}
isfunction()

        但是在null这块有点出乎意料了,他为什么没有返回null而是返回object呢,如果这样的话那么null为什么被归为简单数据类型呢 ,其实在这一块我也是有点不理解的,其实我用instanceof也做过判断,null也不属于Object,这里先把这个问题放在这里,我们继续说instanceof

        instanceof:见名知意,判断前者是不是后者的实例,也可以用来检测数据类型,但是他可以检测复杂数据类型,却检测不了简单数据类型。

        我们在上文也说到过,复杂数据类型分为array,function和object,其实在JavaScript中常常流行一句话:万物皆对象。

        那么instanceof是怎么使用的呢?他和typeof的使用方法倒是有一点区别,instanceof使用的时候需要写成 (a instanceof b),即 a 是不是 b 的实例,如果是就返回true,不是就返回false

        例:

function isfunction(){
    console.log(isfunction instanceof Function)  //true
}
isfunction()

const arr = [ 1, 2, 3, 4, 5, 6 ]
console.log(arr instanceof Array)  //true

const obj = { name:'Jack' }
console.log(obj instanceof Object)  //true

const string = 'Bob'
console.log('132' instanceof String)  //false

其实上述中isfunction和arr也是Object的实例

        这些说完了,那我们再回到上面null的那个问题,为什么typeof null 会返回object

console.log(null instanceof Object)  //false

        如上,返回是false,那么说明null不是Object的实例,那为什么typeof null会返回object呢,我也查阅了一些资料以及问了一些朋友,他们说这个是JavaScript遗留的问题,当初设计null的本意是用来存储一个空对象的指针,进行一个初始化的操作,那到了这里估计还有人会说,那你怎么证明null这个类型是存在的,看你上面的描述,他既不像简单数据类型,又不是复杂数据类型

const nullValue = null
console.log(nullValue === null)  //true
console.log(Object.prototype.toString.call(nullValue))  //[object Null]

上述代码证明null类型是存在的,但是关于他为什么是简单数据类型我也不能证明

好了,这篇文章到这就结束了,我也只是一个刚刚学习JavaScript没多久的小白,如果各位大佬有什么不同的见解,还希望指出,不要喷我,谢谢

相关标签: javascript