Array[Symbol.species]
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2020ë 1ì.
Array[Symbol.species] ì ì ì ê·¼ì ìì±ì ë°°ì´ ë©ìëìì ë°í ê°ì 구ì±íë ë° ì¬ì©ëë ìì±ì를 ë°íí©ëë¤.
ê²½ê³ :
[Symbol.species]ê° ì¡´ì¬íë©´ ìì ì½ëê° ì¤íë ì ìì´ ë³´ì ì·¨ì½ì ì´ ë°ìí ì ììµëë¤. ëí í¹ì ìµì í를 í¨ì¬ ë ì´ë µê² ë§ëëë¤. ìì§ êµ¬íìë ì´ ê¸°ë¥ì ì ê±°í ì§ ê²í íê³ ììµëë¤. ê°ë¥íë©´ ì´ ê¸°ë¥ì ìì¡´íì§ ë§ììì¤. toReversed()ì ê°ì ìµì ë°°ì´ ë©ìëë [Symbol.species]를 ì¬ì©íì§ ìì¼ë©°, íì ì Array ê¸°ë° í´ëì¤ ì¸ì¤í´ì¤ë¥¼ ë°íí©ëë¤.
구문
Array[Symbol.species]
ë°í ê°
get [Symbol.species]ê° í¸ì¶ë ìì±ì(this)ì ê°ì
ëë¤. ë°íê°ì ì ë°°ì´ì ìì±íë ë°°ì´ ë©ìëìì ë°íê°ì 구ì±íë ë° ì¬ì©ë©ëë¤.
ì¤ëª
[Symbol.species] ì ê·¼ì ìì±ì Array ê°ì²´ì ëí 기본 ìì±ì를 ë°íí©ëë¤. íì í´ëì¤ ìì±ìê° ì´ë¥¼ ì¬ì ìíì¬ ìì±ì í ë¹ì ë³ê²½í ì ììµëë¤. 기본 구íì 기본ì ì¼ë¡ ë¤ìê³¼ ê°ìµëë¤.
// ì¤ëª
ì ìí ê°ìì ë´ë¶ 구í
class Array {
static get [Symbol.species]() {
return this;
}
}
ì´ ë¤íì± êµ¬íì¼ë¡ ì¸í´ íìë íì í´ëì¤ì [Symbol.species]ë 기본ì ì¼ë¡ ìì±ì ì체를 ë°íí©ëë¤.
class SubArray extends Array {}
SubArray[Symbol.species] === SubArray; // true
기존 ë°°ì´ì ë³ê²½íì§ ìê³ ì ë°°ì´ ì¸ì¤í´ì¤ë¥¼ ë°ííë ë°°ì´ ë©ìë(ì: filter(), map())를 í¸ì¶íë©´, ë°°ì´ì constructor[Symbol.species]ì ì ê·¼í©ëë¤. ë°íë ìì±ìë ë°°ì´ ë©ìëì ë°íê°ì 구ì±íë ë° ì¬ì©ë©ëë¤. ì´ë ê² íë©´ ë°°ì´ ë©ìëê° ë°°ì´ê³¼ ê´ë ¨ì´ ìë ê°ì²´ë¥¼ ë°ííëë¡ ë§ëë ê²ì´ 기ì ì ì¼ë¡ ê°ë¥í©ëë¤.
class NotAnArray {
constructor(length) {
this.length = length;
}
}
const arr = [0, 1, 2];
arr.constructor = { [Symbol.species]: NotAnArray };
arr.map((i) => i); // NotAnArray { '0': 0, '1': 1, '2': 2, length: 3 }
arr.filter((i) => i); // NotAnArray { '0': 1, '1': 2, length: 0 }
arr.concat([1, 2]); // NotAnArray { '0': 0, '1': 1, '2': 2, '3': 1, '4': 2, length: 5 }
ìì
>ì¼ë° ê°ì²´ì species
[Symbol.species] ìì±ì 기본 ìì±ì í¨ì, ì¦ Arrayì Array ìì±ì를 ë°íí©ëë¤.
Array[Symbol.species]; // [Function: Array]
íì ê°ì²´ì species
MyArrayì ê°ì ì¬ì©ì ì ì Arrayì íì í´ëì¤ì ì¸ì¤í´ì¤ìì, MyArrayì speciesë MyArray ìì±ìì
ëë¤. ê·¸ë¬ë íì í´ëì¤ ë©ìëìì ë¶ëª¨ Array ê°ì²´ë¥¼ ë°ííë ¤ë©´ ì´ë¥¼ ë®ì´ì°ë ê²ì´ ì¢ìµëë¤:
class MyArray extends Array {
// MyArray species를 ë¶ëª¨ Array ìì±ìë¡ ì¬ì¤ì
static get [Symbol.species]() {
return Array;
}
}
ëª ì¸ì
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-get-array-%symbol.species%> |