Baseline Widely available
instanceof
è¿ç®ç¬¦ç¨äºæ£æµæé 彿°ç prototype
屿§æ¯å¦åºç°å¨æä¸ªå®ä¾å¯¹è±¡çååé¾ä¸ãå
¶è¿å弿¯ä¸ä¸ªå¸å°å¼ãå¯ä»¥éè¿ Symbol.hasInstance
æ¥èªå®ä¹è¯¥è¿ç®ç¬¦çè¡ä¸ºã
function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
const auto = new Car("Honda", "Accord", 1998);
console.log(auto instanceof Car);
// 颿è¾åºï¼true
console.log(auto instanceof Object);
// 颿è¾åºï¼true
è¯æ³
object instanceof constructor
åæ°
object
è¦æµè¯ç对象
constructor
æµè¯å¯¹ç §çæé 彿°
TypeError
妿 constructor
䏿¯å¯¹è±¡ï¼æ constructor
没æ [Symbol.hasInstance]()
æ¹æ³ï¼é£ä¹å®ä¸å®æ¯ä¸ä¸ªå½æ°ï¼ï¼åæåºè¯¥å¼å¸¸ã
instanceof
è¿ç®ç¬¦ç¨æ¥æ£æµ constructor.prototype
æ¯å¦åå¨äºåæ° object
çååé¾ä¸ã
// å®ä¹æé 彿°
function C() {}
function D() {}
const o = new C();
// trueï¼å 为ï¼Object.getPrototypeOf(o) === C.prototype
o instanceof C;
// falseï¼å 为 D.prototype ä¸å¨ o çååé¾ä¸
o instanceof D;
o instanceof Object; // trueï¼åå å¦ä¸ï¼
C.prototype instanceof Object; // true
// éæ°èµå¼ `constructor.prototype`ï¼å¨å®è·µä¸å¾ç½è§
C.prototype = {};
const o2 = new C();
o2 instanceof C; // true
// falseï¼C.prototype æåäºä¸ä¸ªç©ºå¯¹è±¡ï¼è¿ä¸ªç©ºå¯¹è±¡ä¸å¨ o çååé¾ä¸
o instanceof C;
D.prototype = new C(); // ç»§æ¿
const o3 = new D();
o3 instanceof D; // true
o3 instanceof C; // true å 为 C.prototype ç°å¨å¨ o3 çååé¾ä¸
éè¦æ³¨æçæ¯ï¼å¦æè¡¨è¾¾å¼ obj instanceof Foo
è¿å true
ï¼å并䏿å³ç该表达å¼ä¼æ°¸è¿è¿å true
ï¼å 为 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
ï¼å¹¶ä¸æ°ç»ä»åè
ç»§æ¿ã
èµ·åï¼ä½ ä¼è®¤ä¸ºè¿æ ·å¹¶æ²¡ææä¹ï¼ä½æ¯å½ä½ å¨ä½ çèæ¬ä¸å¼å§å¤çå¤ä¸ª frame æå¤ä¸ª window 以åéè¿å½æ°å°å¯¹è±¡ä»ä¸ä¸ªçªå£ä¼ å°å¦ä¸ä¸ªçªå£æ¶ï¼è¿å°±æ¯ä¸ä¸ªææè强大çè¯é¢ãæ¯å¦ï¼å®é
ä¸ä½ å¯ä»¥éè¿ä½¿ç¨Array.isArray(myObj)
æè
Object.prototype.toString.call(myObj) === "[object Array]"
æ¥å®å
¨çæ£æµä¼ è¿æ¥ç对象æ¯å¦æ¯ä¸ä¸ªæ°ç»ã
æ¯å¦æ£æµä¸ä¸ª Nodes
å¨å¦ä¸ä¸ªçªå£ä¸æ¯ä¸æ¯ SVGElement
ï¼ä½ å¯ä»¥ä½¿ç¨myNode instanceof myNode.ownerDocument.defaultView.SVGElement
夿³¨ï¼ å¨ä»£ç ä¸ä½¿ç¨ XPCOM instanceof
æç¹æ®å½±åï¼å¦ææ¥è¯¢æ¥å£æåæ§è¡åï¼obj instanceof
xpcomInterface
(e.g. Components.interfaces.nsIFile
) è°ç¨obj.QueryInterface(xpcomInterface)
å¹¶ä¸è¿å true
ãè¿ç§è°ç¨çå¯ä½ç¨æ¯å¨ä¸æ¬¡æåç instanceof
æµè¯åï¼ä½ å¯ä»¥å¨ obj
ä¸ä½¿ç¨xpcomInterface
ç屿§ãè¿ä¸æ åç JavaScript
å
¨å±åéä¸åï¼å³ä½¿ obj
æ¥èªä¸åçä½ç¨åï¼obj instanceof xpcomInterface
ä¹å¯ä»¥æé¢æäº§çä½ç¨ã
String
对象å Date
对象é½å±äº Object
ç±»ååä¸äºç¹æ®æ
åµ
ä¸é¢ç代ç 使ç¨äº instanceof
æ¥è¯æï¼String
å Date
å¯¹è±¡åæ¶ä¹å±äºObject
ç±»åï¼ä»ä»¬æ¯ç± Object
类派çåºæ¥çï¼ã
使¯ï¼ä½¿ç¨å¯¹è±¡åé¢é符å·å建ç对象å¨è¿éæ¯ä¸ä¸ªä¾å¤ï¼è½ç¶ååæªå®ä¹ï¼ä½ instanceof Object
è¿å true
ã
var simpleStr = "This is a simple string";
var myString = new String();
var newStr = new String("String created with constructor");
var myDate = new Date();
var myObj = {};
var myNonObj = Object.create(null);
simpleStr instanceof String; // è¿å falseï¼é对象å®ä¾ï¼å æ¤è¿å false
myString instanceof String; // è¿å true
newStr instanceof String; // è¿å true
myString instanceof Object; // è¿å true
myObj instanceof Object; // è¿å trueï¼å°½ç®¡ååæ²¡æå®ä¹
({}) instanceof Object; // è¿å trueï¼åä¸
myNonObj instanceof Object; // è¿å falseï¼ä¸ç§å建é Object å®ä¾çå¯¹è±¡çæ¹æ³
myString instanceof Date; //è¿å false
myDate instanceof Date; // è¿å true
myDate instanceof Object; // è¿å true
myDate instanceof String; // è¿å false
æ¼ç¤º mycar
å±äº Car
ç±»åçåæ¶åå±äº Object
ç±»å
ä¸é¢ç代ç å建äºä¸ä¸ªç±»å Car
ï¼ä»¥å该类åç对象å®ä¾ mycar
. instanceof
è¿ç®ç¬¦è¡¨æäºè¿ä¸ª 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; // è¿å true
var b = mycar instanceof Object; // è¿å true
䏿¯...çå®ä¾
è¦æ£æµå¯¹è±¡ä¸æ¯æä¸ªæé 彿°çå®ä¾æ¶ï¼ä½ å¯ä»¥è¿æ ·å
if (!(mycar instanceof Car)) {
// Do something, like mycar = new Car(mycar)
}
è¿å以ä¸ä»£ç å®å ¨ä¸å
if (!mycar instanceof Car)
è¿æ®µä»£ç æ°¸è¿ä¼å¾å° false
ï¼!mycar
å°å¨ instanceof
ä¹å被å¤çï¼æä»¥ä½ æ»æ¯å¨éªè¯ä¸ä¸ªå¸å°å¼æ¯å¦æ¯ Car
çä¸ä¸ªå®ä¾ï¼ã
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4