博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript运算符instanceof
阅读量:4710 次
发布时间:2019-06-10

本文共 2297 字,大约阅读时间需要 7 分钟。

概述

instanceof 运算符可以用来判断某个构造函数的prototype属性是否存在另外一个要检测对象的原型链上。

语法

object instanceof constructor

参数

object
要检测的对象.
constructor
某个构造函数

描述

instanceof运算符用来检测constructor.prototype是否存在于参数object的原型链上。

function C(){} // 定义一个构造函数function D(){} // 定义另一个构造函数var o = new C();o instanceof C; // true,因为:Object.getPrototypeOf(o) === C.prototypeo instanceof D; // false,因为D.prototype不在o的原型链上o instanceof Object; // true,因为Object.prototype.isPrototypeOf(o)返回trueC.prototype instanceof Object // true,同上C.prototype = {};var o2 = new C();o2 instanceof C; // trueo instanceof C; // false,C.prototype指向了一个空对象,这个空对象不在o的原型链上.D.prototype = new C();var o3 = new D();o3 instanceof D; // trueo3 instanceof C; // true

需要注意的是,如果表达式 obj instanceof Foo 返回true,则并不意味着该表达式会永远返回ture,因为Foo.prototype属性的值有可能会改变,改变之后的值很有可能不存在于obj的原型链上,这时原表达式的值就会成为false。另外一种情况下,原表达式的值也会改变,就是改变对象obj的原型链的情况,虽然在目前的ES规范中,我们只能读取对象的原型而不能改变它,但借助于非标准的__proto__魔法属性是可以实现的。比如执行obj.__proto__ = {}之后obj instanceof Foo就会返回false了。

instanceof和多全局对象(多个frame或多个window之间的交互)

在浏览器中,我们的脚本可能需要在多个窗口之间进行交互。多个窗口意味着多个全局环境,不同的全局环境拥有不同的全局对象,从而拥有不同的内置类型构造函数。这可能会引发一些问题。比如,表达式 [] instanceof window.frames[0].Array 会返回false,因为Array.prototype !== window.frames[0].Array.prototype因此你必须使用Array.isArray(myObj)或者 Object.prototype.toString.call(myObj) === "[object Array]"来判断myObj是否是数组。

例子

例子: 表明String对象和Date对象都属于Object类型

下面的代码使用了instanceof来证明:String和Date对象同时也属于Object类型

var myString = new String();var myDate = new Date();myString instanceof String; // 返回truemyString instanceof Object; // 返回truemyString instanceof Date;   // 返回falsemyDate instanceof Date;     // 返回truemyDate instanceof Object;   // 返回truemyDate instanceof String;   // 返回false

例子: 表明mycar属于Car类型,同时又属于Object类型

下面的代码创建了一个类型Car以及该类型的对象实例mycarinstanceof运算符表明了这个mycar对象既属于Car类型又属于Object类型

function Car(make, model, year) {  this.make = make;  this.model = model;  this.year = year;}var mycar = new Car("Honda", "Accord", 1998);var a = mycar instanceof Car;    // 返回 truevar b = mycar instanceof Object; // 返回 true

规范

Specification Status Comment
ECMAScript 1st Edition. Standard Initial definition. Implemented in JavaScript 1.4
Standard  
Draft  

浏览器兼容性

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Yes) (Yes) (Yes) (Yes) (Yes)

转载于:https://www.cnblogs.com/leejersey/p/4283678.html

你可能感兴趣的文章
iOS项目之WKWebView替换UIWebView相关
查看>>
Lambda表达式效率问题
查看>>
【转载】iOS 设置Launch Image 启动图片(适用iOS9)
查看>>
最快得到MYSQL两个表的差集
查看>>
UML类图关系
查看>>
清理Visual Studio打开的项目和文件、查找和最近引用组件痕迹
查看>>
正则表达式速查表
查看>>
项目开源-基于ASP.NET Core和EF Core的快速开发框架
查看>>
UVA 580 - Critical Mass(简单DP)
查看>>
iOS应用日志:开始编写日志组件与异常日志
查看>>
Linux通过NFS实现文件共享
查看>>
15模块-Maps【管理地图控件】
查看>>
runtime
查看>>
VS2008中宽字节和普通字节的使用
查看>>
父类 子类 构造方法
查看>>
vs2015下编译duilib的几个问题
查看>>
获取周的日期范围
查看>>
css案例学习之盒子模型
查看>>
postMan模拟get和post请求,支持局域网和外网
查看>>
day16T3改错记
查看>>