Skip to content

Commit

Permalink
[ko] JavaScript: Array.with(),Symbol.toString() 추가 (#13751)
Browse files Browse the repository at this point in the history
- Array.prototype.with() 추가
- Symbol.prototype.toString() 추가
  • Loading branch information
wisedog authored Jul 8, 2023
1 parent 8e93990 commit 1b88d64
Show file tree
Hide file tree
Showing 2 changed files with 174 additions and 0 deletions.
102 changes: 102 additions & 0 deletions files/ko/web/javascript/reference/global_objects/array/with/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
---
title: Array.prototype.with()
slug: Web/JavaScript/Reference/Global_Objects/Array/with
l10n:
sourceCommit: 6bd17cb9cbc2d11163617b9f71706e93fdd743c8
---

{{JSRef}}

{{jsxref("Array")}} 인스턴스의 **`with()`** 메서드는 주어진 인덱스의 값을 변경하기 위해 [대괄호 표기법](/ko/docs/Web/JavaScript/Reference/Operators/Property_accessors#bracket_notation)을 사용하는 것의 [복사](/ko/docs/Web/JavaScript/Reference/Global_Objects/Array#copying_methods_and_mutating_methods) 버전입니다. 이 함수는 지정된 인덱스의 요소가 지정된 값으로 대체된 새 배열을 반환합니다.

## 구문

```js-nolint
array.with(index, value)
```

### 매개변수

- `index`
- : 배열을 변경할 0 기반 인덱스이며 [정수로 변환](/ko/docs/Web/JavaScript/Reference/Global_Objects/Number#integer_conversion)되는 값입니다.
- 음수 인덱스는 배열의 끝부터 역산합니다 — `index < 0`인 경우 `index + array.length`가 사용됩니다.
- 정규화 후 인덱스가 범위를 벗어나면, {{jsxref("RangeError")}}가 발생합니다.
- `value`
- : 주어진 인덱스에 할당할 값입니다.

### 반환 값

`index`의 요소 값이 `value`로 대체된 새로운 배열.

### 예외

- {{jsxref("RangeError")}}
- : `index > array.length` 혹은 `index < -array.length` 일때 발생합니다.

## 설명

`with()` 메서드는 배열에서 주어진 인덱스의 값을 변경하여, 주어진 인덱스에 있는 요소가 주어진 값으로 대체된 새 배열을 반환합니다. 원래 배열은 수정되지 않습니다. 이를 통해 조작을 수행하는 동안 배열 메서드를 연속으로 이어서 호출 할 수 있습니다.

`with()` 메서드는 [희소 배열](/ko/docs/Web/JavaScript/Guide/Indexed_collections#희소배열)을 생성하지 않습니다. 만약 원래 배열이 희소 배열인 경우 빈 슬롯은 새로운 배열에서 `undefined`으로 대체됩니다.

`with()` 메서드는 [제네릭](/ko/docs/Web/JavaScript/Reference/Global_Objects/Array#generic_array_methods) 메서드입니다. 이 메서드는 `this` 값에 `length` 속성과 정수 키 속성 만을 필요로 합니다.

## 예제

### 하나의 요소만 변경한채로 새로운 배열을 만들기

```js
const arr = [1, 2, 3, 4, 5];
console.log(arr.with(2, 6)); // [1, 2, 6, 4, 5]
console.log(arr); // [1, 2, 3, 4, 5]
```

### 배열 메서드 연속하여 연결하기

`with()` 메서드를 사용하면 배열의 단일 요소를 업데이트한 후 다른 배열 메서드를 적용할 수 있습니다.

```js
const arr = [1, 2, 3, 4, 5];
console.log(arr.with(2, 6).map((x) => x ** 2)); // [1, 4, 36, 16, 25]
```

### 희소 배열에서 with() 사용하기

`with()` 메서드는 언제나 밀집 배열을 생성합니다.

```js
const arr = [1, , 3, 4, , 6];
console.log(arr.with(0, 2)); // [2, undefined, 3, 4, undefined, 6]
```

### 배열이 아닌 객체에서 with() 호출하기

`with()` 메서드는 `this``length` 속성을 읽습니다. 그리고 `this`의 정수 키 속성을 읽어서 새 배열에 쓰고,
`value`는 주어진 `index`에 씁니다.

```js
const arrayLike = {
length: 3,
unrelated: "foo",
0: 5,
2: 4,
};
console.log(Array.prototype.with.call(arrayLike, 0, 1));
// [ 1, undefined, 4 ]
```

## 명세서

{{Specifications}}

## 브라우저 호환성

{{Compat}}

## 같이 보기

- [Polyfill of `Array.prototype.with` in `core-js`](https://github.com/zloirock/core-js#change-array-by-copy)
- {{jsxref("Array.prototype.toReversed()")}}
- {{jsxref("Array.prototype.toSorted()")}}
- {{jsxref("Array.prototype.toSpliced()")}}
- {{jsxref("TypedArray.prototype.with()")}}
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
---
title: Symbol.prototype.toString()
slug: Web/JavaScript/Reference/Global_Objects/Symbol/toString
l10n:
sourceCommit: f3df52530f974e26dd3b14f9e8d42061826dea20
---

{{JSRef}}

**`toString()`** 메서드는 지정된 심볼 값을 나타내는 문자열을 반환합니다.

{{EmbedInteractiveExample("pages/js/symbol-prototype-tostring.html")}}

## 구문

```js-nolint
toString()
```

### 반환 값

지정된 심볼 값을 나타내는 문자열.

## 설명

{{jsxref("Symbol")}} 객체는 {{jsxref("Object")}}의 `toString` 메서드를 재정의하며,
{{jsxref("Object.prototype.toString()")}}을 상속하지 않습니다.
`Symbol` 값의 경우 `toString` 메서드는 `"Symbol(description)"` 형식의 설명 문자열을 반환하며,
여기서 `description`은 심볼의 [설명](/ko/docs/Web/JavaScript/Reference/Global_Objects/Symbol/description)입니다.

`toString()` 메서드는 `this` 값이 `Symbol` 원시 값 또는 래퍼 객체여야 합니다. 이 외의 `this` 값에 대해서는 심볼 값으로 강제 변환하지 않고 {{jsxref("TypeError")}}를 던집니다.

`Symbol`에는 [`[@@toPrimitive]()`](/ko/docs/Web/JavaScript/Reference/Global_Objects/Symbol/@@toPrimitive) 메서드가 있기 때문에 `Symbol` 객체를 [문자열로 강제 변환](/ko/docs/Web/JavaScript/Reference/Global_Objects/String#string_coercion)할 때 이 메서드가 항상 `toString()`보다 우선합니다.
그러나 `Symbol.prototype[@@toPrimitive]()`는 심볼 원시 값을 반환하고 심볼 원시 값은 문자열로 암시적으로 변환될 때 {{jsxref("TypeError")}}가 발생하기 때문에 언어에서 `toString()` 메서드는 절대 암시적으로 호출되지 않습니다.
심볼을 문자열화하려면 해당 심볼의 `toString()` 메서드를 명시적으로 호출하거나 [`String()`](/ko/docs/Web/JavaScript/Reference/Global_Objects/String/String#using_string_to_stringify_a_symbol) 함수를 사용해야 합니다.

## 예제

### toString() 사용하기

```js
Symbol("desc").toString(); // "Symbol(desc)"

// 잘 알려진 심볼
Symbol.iterator.toString(); // "Symbol(Symbol.iterator)"

// 글로벌 심볼
Symbol.for("foo").toString(); // "Symbol(foo)"
```

### 암시적 toString() 호출

JavaScript가 심볼 래퍼 객체에서 [`[@@toPrimitive]()`](/ko/docs/Web/JavaScript/Reference/Global_Objects/Symbol/@@toPrimitive) 대신 `toString()`을 암시적으로 호출하도록 하는 유일한 방법은 `@@toPrimitive` 메서드를 먼저 [삭제](/ko/docs/Web/JavaScript/Reference/Operators/delete) 처리하는 방법 뿐 입니다.

> **주의:** 실제로 이 작업을 수행하지 마세요. 정확히 무엇을 하고 있는지 알지 못하면 기본 제공 객체를 변경하지 마세요.
```js
delete Symbol.prototype[Symbol.toPrimitive];
console.log(`${Object(Symbol("foo"))}`); // "Symbol(foo)"
```

## 명세서

{{Specifications}}

## 브라우저 호환성

{{Compat}}

## 같이 보기

- {{jsxref("Object.prototype.toString()")}}

0 comments on commit 1b88d64

Please sign in to comment.