JavaScript中的instanceof
关键字在第一次遇到时可能会非常混乱,因为人们往往认为JavaScript不是面向对象的编程语言.
- 这是怎么一回事?
- 它解决了什么问题?
- 什么时候合适,什么时候不合适?
JavaScript中的instanceof
关键字在第一次遇到时可能会非常混乱,因为人们往往认为JavaScript不是面向对象的编程语言.
左侧(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
.
当你声明一个变量时,你给它一个特定的类型.
例如:
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.
就这么简单!