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

        在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没多久的小白,如果各位大佬有什么不同的见解,还希望指出,不要喷我,谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值