JavaScript 中的instanceof关键字在第一次遇到时可能会很混乱,因为人们倾向于认为 JavaScript 不是一种面向对象的编程语言。
instanceof
左侧 (LHS) 操作数是被测试到右侧 (RHS) 操作数的实际对象,右侧 (RHS) 操作数是类的实际构造函数。基本定义是:
检查当前对象,如果对象属于指定的对象类型,则返回 true。
这里有一些很好的例子,下面是一个直接取自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.
p instanceof Person
p
Person.prototype
我添加了一个带有一些示例代码和解释的小示例。
当你声明一个变量时,你给它一个特定的类型。
例如:
int i; float f; Customer c;
上面显示了一些变量,即i、f和c。类型是integer,float和用户定义的Customer数据类型。上述类型可以用于任何语言,而不仅仅是 JavaScript。然而,在 JavaScript 中,当你声明一个变量时,你没有明确定义一个类型var x,x 可以是一个数字/字符串/用户定义的数据类型。那么instanceof它的作用是检查对象以查看它是否属于指定的类型,因此从上面获取Customer我们可以做的对象:
i
f
c
integer
float
Customer
var x
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是用 type 声明的Customer。我们已经新建了它并检查了它是否属于类型Customer。当然,它返回 true。然后仍然使用Customer我们检查它是否是一个对象String。不,绝对不是String我们新的Customer对象而不是String对象。在这种情况下,它返回 false。
String
真的就是这么简单!