instanceof
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2015ë 7ì.
instanceof ì°ì°ìë ìì±ìì prototype ìì±ì´ ê°ì²´ì íë¡í íì
ì²´ì¸ ì´ëê° ì¡´ì¬íëì§ íë³í©ëë¤.
ìëí´ ë³´ê¸°
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);
// Expected output: true
console.log(auto instanceof Object);
// Expected output: true
구문
object instanceof constructor;
매ê°ë³ì
object-
íë³í ê°ì²´.
constructor-
íë³ ëª©í í¨ì.
ì¤ëª
instanceof ì°ì°ìë objectì íë¡í íì
ì²´ì¸ì constructor.prototypeì´ ì¡´ì¬íëì§ íë³í©ëë¤.
// ìì±ì ì ì
function C() {}
function D() {}
var 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
C.prototype = {};
var o2 = new C();
o2 instanceof C; // true
// false, ìëíë©´ C.prototypeì´
// ë ì´ì oì íë¡í íì
ì²´ì¸ì ìì
o instanceof C;
D.prototype = new C(); // C를 Dì [[Prototype]] ë§í¬ë¡ ì¶ê°
var o3 = new D();
o3 instanceof D; // true
o3 instanceof C; // true, ìëíë©´ ì´ì C.prototypeì´ o3ì íë¡í íì
ì²´ì¸ì ì¡´ì¬
instanceof ì ê°ì ìì±ì prototype íë¡í¼í°ì ë³íì ë°ë¼ ë°ëì ìì¼ë©°, Object.setPrototypeOfì ì¬ì©í¨ì ë°ë¼ìë ë°ë ì ììì 주ìíì¸ì. ëí non-standardì __proto__ ìë-íë¡í¼í°ë ì¬ì©í ì ìëë¡ ë§ë¤ì´ ì¤ëë¤.
instanceof ì multiple context (ì. íë ì ëë ì°½)
ë¤ë¥¸ ì¤ì½íë ë¤ë¥¸ ì¤í íê²½ì ê°ì§ëë¤. ì´ê²ì ë¤ë¥¸ ì¤ì½íë ë¤ë¥¸ ê³ ì ë ììë¤(ë¤ë¥¸ ì ì ì¤ë¸ì í¸, ë¤ë¥¸ ìì±ìë¤ ë±)ì ê°ì§ê³ ììì ì미í©ëë¤. ì´ ì¬ì¤ì ììì¹ ëª»í 결과를 ê°ì ¸ì¬ ìë ììµëë¤. ì를 ë¤ë©´, [] instanceof window.frames[0].Arrayë false를 리í´í ê²ì
ëë¤. ìëíë©´, Array.prototype !== window.frames[0].Array ì´ë©°, arrays ë ììë¡ë¶í° ììë°ê¸° ë문ì
ëë¤. ì´ê²ì ì²ììë ë§ì´ ëì§ ìì ìë ììµëë¤. íì§ë§, ì¤í¬ë¦½í¸ìì ì¬ë¬ íë ìì´ë ì°½ì ë¤ë£¨ë©°, ê°ì²´ë¥¼ í¨ì를 íµíì¬ íëì 컨í
ì¤í¸ìì ë¤ë¥¸ 컨í
ì¤í¸ë¡ ì¤ë¸ì í¸ë¥¼ ëê¸°ê² ëë¤ë©´, ì´ê±´ ì¶©ë¶í ì¼ì´ë ì ìë ì¼ì´ë©°, ì주 í° ì´ìê° ë ê²ì
ëë¤. ì를 ë¤ì´, 주ì´ì§ ì¤ë¸ì í¸ê° ì¤ì ë¡ Array.isArray(myObj)를 ì¬ì©í Arrayì¸ì§ ìì íê² íì¸ í ì ììµëë¤.
ì°¸ê³ :
XPCOM instanceof ì ì¬ì©íë ì½ëììë í¹ë³í í¨ê³¼ë¥¼ ê°ì§ëë¤. : obj instanceof xpcomInterface (ì. Components.interfaces.nsIFile)ê° obj.QueryInterface(xpcomInterface)를 í¸ì¶íê³ , ë§ì½ QueryInterface ê° ì±ê³µíë©´ true 를 리í´í©ëë¤. ì´ í¸ì¶ì ë¶ê° í¨ê³¼ë¡ë obj ìì ì±ê³µì ì¸ instanceof í
ì¤í¸ íì xpcomInterface'sì íë¡í¼í°ë¥¼ ì¬ì©í ì ììµëë¤. ì¤í ë¤ë JavaScript ì ììì±ë¤ê³¼ë ë¬ë¦¬, í
ì¤í¸ obj instanceof xpcomInterfaceë objê° ë¤ë¥¸ ì¤ì½íì ìëë¼ë ìëí©ëë¤.
ìì
>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 = {};
simpleStr instanceof String; // returns false, prototype chainì íì¸íê³ , undefined를 ì°¾ëë¤.
myString instanceof String; // returns true
newStr instanceof String; // returns true
myString instanceof Object; // returns true
myObj instanceof Object; // returns true, undefined prototype ììë ë¶êµ¬íê³ true.
({}) instanceof Object; // returns true, ìì ê²½ì°ì ëì¼.
myString instanceof Date; // returns false
myDate instanceof Date; // returns true
myDate instanceof Object; // returns true
myDate instanceof String; // returns 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; // returns true
var b = mycar instanceof Object; // returns true
ëª ì¸ì
| Specification |
|---|
| ECMAScript® 2027 Language Specification > # sec-relational-operators > |