forked from mdn/translated-content
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[ko] JavaScript: Symbol 메서드 2개 추가 (mdn#13060)
* [ko] JavaScript: Symbol 메서드 2개 추가 - Symbol.hasInstance 추가 - Symbol.isConcatSpreadable 추가 * [ko] 리뷰 반영 부울 -> 불리언
- Loading branch information
Showing
2 changed files
with
177 additions
and
0 deletions.
There are no files selected for viewing
86 changes: 86 additions & 0 deletions
86
files/ko/web/javascript/reference/global_objects/symbol/hasinstance/index.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
--- | ||
title: Symbol.hasInstance | ||
slug: Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance | ||
l10n: | ||
sourceCommit: d27cac7971d2797448b8d037dfbcb460e512fdcd | ||
--- | ||
|
||
{{JSRef}} | ||
|
||
**`Symbol.hasInstance`** 정적 데이터 속성은 [잘 알려진 심볼](/ko/docs/Web/JavaScript/Reference/Global_Objects/Symbol#잘_알려진_심볼) `@@hasInstance`를 나타냅니다. | ||
{{jsxref("Operators/instanceof", "instanceof")}} 연산자는 생성자 객체가 객체를 인스턴스로 인식하는지 여부를 확인하기 위해 | ||
사용하는 메서드의 오른쪽 피연산자에서 이 심볼을 찾습니다. | ||
|
||
{{EmbedInteractiveExample("pages/js/symbol-hasinstance.html")}} | ||
|
||
## 값 | ||
|
||
잘 알려진 심볼 `@@hasInstance`. | ||
|
||
{{js_property_attributes(0, 0, 0)}} | ||
|
||
## 설명 | ||
|
||
`instanceof` 연산자는 다음 알고리즘을 사용하여 `object instanceof constructor`의 반환 값을 계산합니다. | ||
|
||
1. `constructor`에 `@@hasInstance` 메서드가 있는 경우, 첫 번째 인수로 `object`를 사용하여 호출하고 [불리언으로 강제 변환](/ko/docs/Web/JavaScript/Reference/Global_Objects/Boolean#boolean_coercion)된 결과를 반환합니다. | ||
`constructor`가 객체가 아니거나 `constructor[@@hasInstance]`가 `null`, `undefined`, 함수 중 하나가 아닌 경우 {{jsxref("TypeError")}}가 발생합니다. | ||
|
||
2. 그렇지 않으면, `constructor`에 `@@hasInstance` 메서드가 없는 경우(`constructor[@@hasInstance]`가 `null` 또는 `undefined`), | ||
[`Function.prototype[@@hasInstance]`](/ko/docs/Web/JavaScript/Reference/Global_Objects/Function/@@hasInstance)와 동일한 알고리즘을 사용하여 결과를 결정합니다. | ||
`constructor`가 함수가 아닌 경우 {{jsxref("TypeError")}}가 발생합니다. | ||
|
||
모든 함수는 기본적으로 `Function.prototype`을 상속하기 때문에, 대부분의 경우 [`Function.prototype[@@hasInstance]`](/ko/docs/Web/JavaScript/Reference/Global_Objects/Function/@@hasInstance) 메서드는 오른쪽이 함수인 경우 `instanceof`의 동작을 지정합니다. | ||
|
||
## 예제 | ||
|
||
### 사용자 지정 instanceof 동작 | ||
|
||
예를 들어 다음과 같이 사용자 정의 `instanceof` 동작을 구현할 수 있습니다. | ||
|
||
```js | ||
class MyArray { | ||
static [Symbol.hasInstance](instance) { | ||
return Array.isArray(instance); | ||
} | ||
} | ||
console.log([] instanceof MyArray); // true | ||
``` | ||
|
||
```js | ||
function MyArray() {} | ||
Object.defineProperty(MyArray, Symbol.hasInstance, { | ||
value(instance) { | ||
return Array.isArray(instance); | ||
}, | ||
}); | ||
console.log([] instanceof MyArray); // true | ||
``` | ||
|
||
### 객체의 인스턴스 검사하기 | ||
|
||
`instanceof` 키워드를 사용하여 객체가 클래스의 인스턴스 여부를 확인할 수 있는 것과 같은 방법으로 | ||
`Symbol.hasInstance`를 사용하여 동일한 검사를 수행할 수 있습니다. | ||
|
||
```js | ||
class Animal { | ||
constructor() {} | ||
} | ||
|
||
const cat = new Animal(); | ||
|
||
console.log(Animal[Symbol.hasInstance](cat)); // true | ||
``` | ||
|
||
## 명세서 | ||
|
||
{{Specifications}} | ||
|
||
## 브라우저 호환성 | ||
|
||
{{Compat}} | ||
|
||
## 같이 보기 | ||
|
||
- {{jsxref("Operators/instanceof", "instanceof")}} | ||
- [`Function.prototype[@@hasInstance]()`](/ko/docs/Web/JavaScript/Reference/Global_Objects/Function/@@hasInstance) |
91 changes: 91 additions & 0 deletions
91
...s/ko/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
--- | ||
title: Symbol.isConcatSpreadable | ||
slug: Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable | ||
l10n: | ||
sourceCommit: 427e8d03276b4915c08c5f0541452fb1c830c295 | ||
--- | ||
|
||
{{JSRef}} | ||
|
||
**`Symbol.isConcatSpreadable`** 정적 데이터 속성은 [잘 알려진 심볼](/ko/docs/Web/JavaScript/Reference/Global_Objects/Symbol#잘_알려진_심볼) `@@isConcatSpreadable`을 나타냅니다. | ||
{{jsxref("Array.prototype.concat()")}} 메서드는 연결된 각 객체에서 이 심볼을 찾아 유사 배열과 객체로 취급하고 | ||
해당 배열 요소로 평탄화해야 하는지 여부를 결정합니다. | ||
|
||
{{EmbedInteractiveExample("pages/js/symbol-isconcatspreadable.html")}} | ||
|
||
## 값 | ||
|
||
잘 알려진 심볼 `@@isConcatSpreadable`. | ||
|
||
{{js_property_attributes(0, 0, 0)}} | ||
|
||
## 설명 | ||
|
||
`@@isConcatSpreadable` 심볼(`Symbol.isConcatSpreadable`)은 자체 또는 상속된 속성으로 | ||
정의할 수 있으며, 그 값은 불리언입니다. 아래와 같이 배열 및 배열 유사 객체에 대한 동작을 제어할 수 있습니다. | ||
|
||
- 배열 객체의 경우 기본 동작은 요소를 펼치는(평평하게 하는) 것입니다. | ||
`Symbol.isConcatSpreadable`은 이러한 경우 평탄화를 피할 수 있습니다. | ||
- 배열과 유사한 객체의 경우 기본 동작은 펼치거나 평평하게 하지 않는 것입니다. | ||
`Symbol.isConcatSpreadable`은 이러한 경우 평탄화를 강제할 수 있습니다. | ||
|
||
## 예제 | ||
|
||
### 배열 | ||
|
||
기본적으로 {{jsxref("Array.prototype.concat()")}}는 여러 배열을 하나의 결과로 펼칩니다(평평하게 만듭니다). | ||
|
||
```js | ||
const alpha = ["a", "b", "c"]; | ||
const numeric = [1, 2, 3]; | ||
|
||
const alphaNumeric = alpha.concat(numeric); | ||
|
||
console.log(alphaNumeric); // 결과: ['a', 'b', 'c', 1, 2, 3] | ||
``` | ||
|
||
`Symbol.isConcatSpreadable`을 `false`로 설정하면 기본 동작을 비활성화할 수 있습니다. | ||
|
||
```js | ||
const alpha = ["a", "b", "c"]; | ||
const numeric = [1, 2, 3]; | ||
|
||
numeric[Symbol.isConcatSpreadable] = false; | ||
const alphaNumeric = alpha.concat(numeric); | ||
|
||
console.log(alphaNumeric); // Result: ['a', 'b', 'c', [1, 2, 3] ] | ||
``` | ||
|
||
### 유사 배열 객체 | ||
|
||
유사 배열 객체에서는 기본 동작이 평탄화시키지 않는 것입니다. | ||
배열을 평탄화시키고 싶다면 `Symbol.isConcatSpreadable`을 `true`로 설정할 필요가 있습니다. | ||
|
||
```js | ||
const x = [1, 2, 3]; | ||
|
||
const fakeArray = { | ||
[Symbol.isConcatSpreadable]: true, | ||
length: 2, | ||
0: "hello", | ||
1: "world", | ||
}; | ||
|
||
x.concat(fakeArray); // [1, 2, 3, "hello", "world"] | ||
``` | ||
|
||
> **참고:** `length` 속성은 추가할 객체 속성의 수를 제어하는 데 사용됩니다. | ||
> 위의 예제에서 `length:2`는 2개의 속성이 추가되었다는 것을 가리킵니다. | ||
## 명세서 | ||
|
||
{{Specifications}} | ||
|
||
## 브라우저 호환성 | ||
|
||
{{Compat}} | ||
|
||
## 같이 보기 | ||
|
||
- [Polyfill of `Symbol.isConcatSpreadable` in `core-js`](https://github.com/zloirock/core-js#ecmascript-symbol) | ||
- {{jsxref("Array.prototype.concat()")}} |