JavaScript中变量的类型判断常常使用typeof运算符,但使用typeof时存在一个缺陷,就是判断引用类型存储值时,无论引用的是什么类型的对象,它都返回 object。ECMAScript引入了另一个Java运算符instanceof来解决这个问题。instanceof运算符与 typeof运算符相似,用于识别正在处理的对象的类型。
与 typeof 方法不同的是,instanceof方法要求开发者明确地确认对象为某特定类型。
1.instanceof运算符用法 var strObj = new String("字符串"); console.log(strObj instanceof String); // true 该段代码判断的是变量strObj是否为String对象的实例,strObj 是 String 对象的实例,因此是”true”。尽管不像 typeof 方法那样灵活,但是在 typeof 方法返回 “object” 的情况下,instanceof 方法就很有用。 // 判断 foo 是否是 Foo 类的实例 function Foo(){} var foo = new Foo(); console.log(foo instanceof Foo)
2.instanceof在继承关系中使用 // 判断 foo 是否是 Foo 类的实例 , 并且是否是其父类型的实例 function Aoo(){} function Foo(){} Foo.prototype = new Aoo(); //JavaScript 原型继承 var foo = new Foo(); console.log(foo instanceof Foo)//true console.log(foo instanceof Aoo)//true foo作为构造函数Foo的实例,因为构造函数Foo原型继承了构造函数Aoo,因此返回true。该代码中是判断了一层继承关系中的父类,在多层继承关系中,instanceof 运算符同样适用。 3.instanceof运算符代码 function instance_of(L, R) { //L 表示左表达式,R 表示右表达式 var O = R.prototype; // 取 R 的显示原型 L = L.__proto__; // 取 L 的隐式原型 while (true) { if (L === null) return false; if (O === L) // 这里重点:当 O 严格等于 L 时,返回 true return true; L = L.__proto__; } }
相关文章
关注千锋学习站小程序
随时随地免费学习课程
扫一扫快速进入
千锋移动端页面
扫码匿名提建议
直达CEO信箱