博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
前端细节大全(三):深入了解js中的instanceof 和 typeof关键字
阅读量:3917 次
发布时间:2019-05-23

本文共 1324 字,大约阅读时间需要 4 分钟。

很多人在学习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);  // truealert(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比较的是两个值。

转载地址:http://zntrn.baihongyu.com/

你可能感兴趣的文章
.NET必知的EventCounters性能指标监视器
查看>>
快来参加学习.NET 挑战赛
查看>>
被冷落的运算符重载
查看>>
ASP.NET Core 中基于工厂的中间件激活
查看>>
跟我一起学Redis之Redis事务简单了解一下
查看>>
微软发布VS Code Jupyter插件!不止Python!多语言的Jupyter Notebook支持来了!
查看>>
64岁Python之父加入微软 | 谁说大龄程序员无出路
查看>>
说说 C# 9 新特性的实际运用
查看>>
System.Text.Json中时间格式化
查看>>
怎么将SVG转成PNG(.NET工具包编写)
查看>>
.NET Core3.1升级.NET5,坑还真不少...
查看>>
为什么曾经优秀的人突然变得平庸?
查看>>
.NET 5 中的隐藏特性
查看>>
客户的一个紧急bug,我用了两种方式进行 C# 反编译修改源码
查看>>
.NET5都来了,你还不知道怎么部署到linux?最全部署方案,总有一款适合你
查看>>
我画着图,FluentAPI 她自己就生成了
查看>>
BenchmarkDotNet v0.12x新增功能
查看>>
使用 .NET 5 体验大数据和机器学习
查看>>
C# 中的数字分隔符 _
查看>>
持续交付一:从开发到上线的环境
查看>>