前端细节大全(三):深入了解js中的instanceof 和 typeof关键字

本文深入探讨JavaScript中的typeof和instanceof关键字的区别与应用。typeof用于检查变量的数据类型,如number、string等;instanceof则用于判断变量是否为特定构造函数的实例。文章通过实例解释了两者的工作原理,并对比了JavaScript与Java在实例化过程中的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多人在学习js的过程中,会遇到比较类型和比较实例对象的问题,以上的两个关键字:instanceof 和typeof分别是比较实例对象和比较数据类型的作用。所以他们是有区别的。


一、typeof关键字

            type-of,顾名思义就是比较变量的数据类型是否是需要的类型或者是去判断的类型,常用的语法是

typeof(变量或对象)= "值的类型"

typeof操作符返回一个字符串。

一般的返回结果可能有如下这几种情况:"number"、"string"、"boolean"、"object"、"function" 和 "undefined"。

 

注意:Array,Null 等特殊对象使用 typeof 一律返回object。


二、instanceof 关键字

        instanceof 关键字在js中是用于判断一个变量是否属于某个对象的实例。当然这和java中的实例在虚拟机中占有的存储是否一致?我们用一个例子。

       1.instanceof的用法

var b = new Array();
alert(b instanceof Array);  // true
alert(b instanceof Object)  // true

可以看到 变量b实例化了Array,所以b是属于Array的一个类似于开辟了一个子类空间,属于父类管理的。那么为什么Array和object都是true呢?这个其实很好理解,因为Array也是object类的,所以可以说Array把它当作object的子类一部分,这样很好理解了。

   我看过js原型,更深层次来讲,instanceof 运算符是用来检测 constructor.prototype 是否存在于参数 object 的原型链上。我们在新建一个函数function对象时,会生成一个叫做prototype 的属性集合的东西,往往和伴随另一个叫做Proto的东西生成,可以把它当做之后如果被实例化的那个对象的内部指针,指向js原型。


         2.对于js实例化

    这个是题外话,看了一下js的实例化,发现和java中的实例化存储位置是相差甚大的。举个例子,

var a = new Array(); 
var b = new Array();
alert(a=b?true:false);//js

js中生成的两个Array的实例化对象a和b,发现他们比较之后输出的是true

在看java

Employee e = new Employee();
Employee a = new Employee();
System.out.println(a==e?true:false);

这里设计了一个Employee类,然后实例化这个类分别为对象a和b。

现在比较他们两个发现输出是false

这是为什么呢?

首先我们必须知道的是,javascript是弱类型语言,而java是强类型语言,这个就代表着java拥有自己的一个叫做jvm(java虚拟机)的东西,它可以分配一些的内存去存储一些东西而且分的很清楚。但是js就是一个基本就像一个整体,所以即便新实例化一个对象,也是在这个整体上完成的。java比较的是两个地址,js比较的是两个值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值