为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript中的instanceof运算子是什么?

JavaScript中的instanceof运算子是什么?

Qyouu 2019-10-14 13:57:43
在instanceofJavaScript中的关键字可能会相当混乱首次遇到它的时候,人们往往会认为JavaScript是不是面向对象的编程语言。它是什么?它解决什么问题?什么时候合适,什么时候不合适?
查看完整描述

3 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

实例

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


Checks the current object and returns true if the object

is of the specified object type.

这是一些很好的示例,这是直接从Mozilla开发人员网站获取的示例:


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。


根据OP的要求

我添加了一个带有示例代码和解释的小示例。


声明变量时,可以为其指定特定类型。


例如:


int i;

float f;

Customer c;

上面显示一些变量,即i,f和c。这些类型是integer,float和用户定义的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。


真的就是这么简单!


查看完整回答
反对 回复 2019-10-14
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

此处的其他答案是正确的,但它们并未instanceof涉及实际的工作方式,这可能是一些语言律师所感兴趣的。


JavaScript中的每个对象都有一个原型,可以通过该__proto__属性访问。函数还具有一个prototype属性,该属性是__proto__它们创建的任何对象的初始值。创建函数时,会为其提供一个唯一的对象prototype。该instanceof操作员使用这种独特性给你一个答案。以下是instanceof可能的样子,如果你写一个函数。


function instance_of(V, F) {

  var O = F.prototype;

  V = V.__proto__;

  while (true) {

    if (V === null)

      return false;

    if (O === V)

      return true;

    V = V.__proto__;

  }

}

这基本上是ECMA-262版本5.1(也称为ES5)第15.3.5.3节的措辞。


请注意,可以将任何对象重新分配给函数的prototype属性,并且可以__proto__在构造对象后重新分配对象的属性。这将给您一些有趣的结果:


function F() { }

function G() { }

var p = {};

F.prototype = p;

G.prototype = p;

var f = new F();

var g = new G();


f instanceof F;   // returns true

f instanceof G;   // returns true

g instanceof F;   // returns true

g instanceof G;   // returns true


F.prototype = {};

f instanceof F;   // returns false

g.__proto__ = {};

g instanceof G;   // returns false


查看完整回答
反对 回复 2019-10-14
  • 3 回答
  • 0 关注
  • 365 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信