JavaScript中的instanceof关键字在第一次遇到时可能会非常混乱,因为人们往往认为JavaScript不是面向对象的编程语言.

  • 这是怎么一回事?
  • 它解决了什么问题?
  • 什么时候合适,什么时候不合适?

推荐答案

instanceof

左侧(LHS)操作数是要测试的实际对象,右侧(RHS)操作数是类的实际构造函数.基本定义是:

判断当前对象,如果该对象属于指定的对象类型,则返回true.

这里有大约good examples个,下面是一个直接取自Mozilla's developer site的例子:

var color1 = new String("green");
color1 instanceof String; // returns true
var color2 = "coral"; //no type specified
color2 instanceof String; // returns false (color2 is not a String object)

值得一提的是,如果对象继承自类的原型,则instanceof的计算结果为true:

var p = new Person("Jon");
p instanceof Person

这是p instanceof Person,因为p继承了Person.prototype.

根据行动的要求

I've added a small example with some sample code and an explanation.

当你声明一个变量时,你给它一个特定的类型.

例如:

int i;
float f;
Customer c;

上面显示了一些变量,即ifc.类型为integerfloat和用户定义的Customer数据类型.上述类型可以用于任何语言,而不仅仅是JavaScript.然而,在JavaScript中,当您声明一个变量时,您没有显式定义类型var x,x可以是数字/字符串/用户定义的数据类型.instanceof的作用是判断对象,看看它是否属于指定的类型,从上面看,我们可以使用Customer对象:

var c = new Customer();
c instanceof Customer; //Returns true as c is just a customer
c instanceof String; //Returns false as c is not a string, it's a customer silly!

在上面我们已经看到,c是用类型Customer声明的.我们把它换了新的,并判断了它是不是Customer型的.当然是,它返回TRUE.然后仍然使用Customer对象,我们判断它是否是String.不,绝对不是String,我们更新的是Customer号物体,而不是String号物体.在本例中,它返回false.

就这么简单!

Javascript相关问答推荐

在卡信息之间切换

为什么在获取回调内设置状态(不会)会导致无限循环?

如何提取Cypress中文本

React Native平面列表自动滚动

使用JavaScript单击上一个或下一个特定按钮创建卡滑动器以滑动单个卡

使用AJX发送表单后,$_Post看起来为空

传递一个大对象以在Express布局中呈现

网页自检测外部元素无法加载

康威的生活游戏规则在我的Javascript版本中不起作用.''我做错了什么?

切换时排序对象数组,切换不起作用

如何在ASP.NET中使用Google Charts API JavaScript将条形图标签显示为绝对值而不是负值

第三方包不需要NODE_MODULES文件夹就可以工作吗?

当用户点击保存按钮时,如何实现任务的更改?

回溯替代方式

FileReader()不能处理Firefox和GiB文件

使用RxJS from Event和@ViewChild vs KeyUp事件和RxJS主题更改输入字段值

select 2-删除js插入的项目将其保留为选项

$GTE的mongoose 问题

material UI自动完成全宽

JSON Web令牌(JWT)错误:RSA密钥对的签名无效