recursal/MDN huggingface dataset:
Map.prototype.get()
===================

**`get()`** 메서드는 `Map` 객체에서 특정 요소를 반환합니다. 만약 주어진 키와 관련된 값이 객체라면 해당 객체에 대한
 참조만 가져오고, 해당 객체에 대한 모든 변경은 `Map` 내에서 효율적으로 수정됩니다.

시도해보기
-----

구문
--


```js
get(key)
```

### 매개변수

`key`

`Map` 객체에서 반환받을 요소의 키

### 반환 값

명시된 키와 연관된 요소 혹은 `Map` 객체에서 해당 키를 찾을 수 없는 경우 `undefined`.

예제
--

### get() 사용하기


```js
const myMap = new Map();
myMap.set("bar", "foo");

console.log(myMap.get("bar")); // "foo" 를 반환합니다.
console.log(myMap.get("baz")); // undefined 을 반환합니다.
```

### get()을 사용하여 객체에 대한 참조 검색


```js
const arr = [];
const myMap = new Map();
myMap.set("bar", arr);

myMap.get("bar").push("foo");

console.log(arr); // ["foo"]
console.log(myMap.get("bar")); // ["foo"]
```


 맵이 원본 객체에 대한 참조만 보유하고 있다는 것은 해당 객체가 가비지 콜렉션되지 않을 수 있으며 이로 인해 예측하지 못한
 메모리 문제가 일어날 수 있음을 의미합니다. 만약 맵에 저장되어 있는 객체가 원본 객체와 동일한 수명을 가지게 하려면
 `WeakMap`을 고려하시기 바랍니다.

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-map.prototype.get |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Map`
* `Map.prototype.set()`
* `Map.prototype.has()`
Map.prototype.clear()
=====================

**`clear()`** 메서드는 `Map` 객체의 모든 요소를 제거합니다.

시도해보기
-----

구문
--


```js
clear()
```

### 반환 값

`undefined`.

예제
--

### clear() 사용하기


```js
const myMap = new Map();
myMap.set("bar", "baz");
myMap.set(1, "foo");

console.log(myMap.size); // 2
console.log(myMap.has("bar")); // true

myMap.clear();

console.log(myMap.size); // 0
console.log(myMap.has("bar")); // false
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-map.prototype.clear |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Map`
Map.prototype.has()
===================

**`has()`** 메서드는 주어진 키에 해당하는 요소가 존재 여부를 가리키는 불리언 값을 반환합니다.

시도해보기
-----

구문
--


```js
has(key)
```

### 매개변수

`key`

`Map` 객체에서 존재를 확인할 요소의 키

### 반환 값

만약 주어진 키에 해당하는 요소가 `Map`객체에 존재한다면 `true`, 그렇지 않으면 `false`

예제
--

### has() 사용하기


```js
const myMap = new Map();
myMap.set("bar", "foo");

console.log(myMap.has("bar")); // true
console.log(myMap.has("baz")); // false
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-map.prototype.has |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Map`
* `Map.prototype.set()`
* `Map.prototype.get()`
Map.prototype.delete()
======================

**`delete()`** 메서드는 키로 `Map` 객체에서 특정 요소를 제거합니다.

시도해보기
-----

구문
--


```js
delete(key)
```

### 매개 변수

`key`

`Map` 객체에서 제거할 요소의 키

### 반환 값

`Map` 객체에서 요소가 존재하고 제거된 경우 `true`, 그렇지 않고 해당 요소가 존재하지 않으면 `false`를 반환합니다.

예제
--

### delete() 사용하기


```js
const myMap = new Map();
myMap.set("bar", "foo");

console.log(myMap.delete("bar")); // true를 반환합니다. 성공적으로 제거되었습니다.
console.log(myMap.has("bar")); // false를 반환합니다. "bar" 요소는 더 이상 존재하지 않습니다.
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-map.prototype.delete |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Map`
Map.prototype.entries()
=======================

**`entries()`** 메서드는 새 반복자
 객체를 반환합니다. 이 객체에는 `Map` 객체의 각 요소에 대한 `[key, value]` 쌍이 삽입 순서대로 포함됩니다.
 이 특별한 경우, 이 반복자 객체도 반복이 가능하므로 for-of 루프를 사용할 수 있습니다. `[Symbol.iterator]` 프로토콜이
 사용될 경우, 호출될 때 반복자 자체를 반환하는 함수를 반환합니다.

시도해보기
-----

구문
--


```js
entries()
```

### 반환 값

새로운 순회 가능한 반복자 객체 (en-US).

예제
--

### entries() 사용하기


```js
const myMap = new Map();
myMap.set("0", "foo");
myMap.set(1, "bar");
myMap.set({}, "baz");

const mapIter = myMap.entries();

console.log(mapIter.next().value); // ["0", "foo"]
console.log(mapIter.next().value); // [1, "bar"]
console.log(mapIter.next().value); // [Object, "baz"]
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-map.prototype.entries |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Map.prototype.keys()`
* `Map.prototype.values()`
Map.prototype.values()
======================

**`values()`** 메서드는 배열의 각 아이템의 값을 순회하는 새로운 맵 반복자 (en-US) 객체를 반환합니다.

시도해보기
-----

구문
--


```js
values()
```

### 반환 값

새로운 순회 가능한 반복자 객체 (en-US).

예제
--

### values() 사용하기


```js
const myMap = new Map();
myMap.set("0", "foo");
myMap.set(1, "bar");
myMap.set({}, "baz");

const mapIter = myMap.values();

console.log(mapIter.next().value); // "foo"
console.log(mapIter.next().value); // "bar"
console.log(mapIter.next().value); // "baz"
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-map.prototype.values |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Map.prototype.entries()`
* `Map.prototype.keys()`
Map.prototype.forEach()
=======================

**`forEach()`** 메서드는 삽입 순서에 따라 `Map` 객체의 각 키/값 쌍마다 한 번씩 제공된 함수를 실행합니다.

시도해보기
-----

구문
--


```js
forEach(callbackFn)
forEach(callbackFn, thisArg)
```

### 매개변수

`callbackFn`

맵의 각 항목에 대해 실행할 함수입니다. 이 함수는 다음 인수를 사용하여 호출됩니다:

`value`

각 반복의 값입니다.

`key`

각 반복의 키입니다.

`map`

반복되는 map입니다.


`thisArg` Optional

`callbackFn`을 실행하고 있을 때 `this`로 사용하는 값.

### 반환 값

`undefined`.

설명
--

`forEach` 메서드는 실제로 존재하는 맵의 각 키에 대해 제공된 `callback`을 한 번씩 실행합니다. 삭제된 키에 대해서는
 호출되지 않습니다. 그러나 값은 존재하지만 `undefined`값일 경우에는 `callback`이 실행됩니다.

`callback`은 **인자 3개**와 함께 호출됩니다.

* 항목의 `value`
* 항목의 `key`
* 순회하고 있는 **`Map` 객체**

`thisArg`가 `forEach`의 매개 변수로 제공되면 호출 시 `this` 값으로 사용하기 위해 `callback`에 전달됩니다.
 그렇지 않으면 `undefined` 값이 `this` 값으로 사용되도록 전달됩니다. `callback`이 궁극적으로 관찰할 수 있는
 `this` 값은 함수가 보는 `this`를 결정하기 위한 일반적인 규칙에 따라 결정됩니다.

`forEach`가 완료되기 전에 삭제했다가 다시 추가한 경우를 제외하고 각 값은 한 번씩 방문합니다. 방문하기 전에 삭제된 값에 대해서는
 `callback`이 호출되지 않습니다. `forEach`가 완료되기 전에 추가된 새 값은 나중에 방문합니다.

예제
--

### Map 객체의 내용을 출력하기

다음 코드는 `Map` 객체에서 각 요소의 내용을 한 줄의 로그로 남깁니다.


```js
function logMapElements(value, key, map) {
  console.log(`map.get('${key}') = ${value}`);
}
new Map([
  ["foo", 3],
  ["bar", {}],
  ["baz", undefined],
]).forEach(logMapElements);
// Logs:
// "map.get('foo') = 3"
// "map.get('bar') = [object Object]"
// "map.get('baz') = undefined"
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-map.prototype.foreach |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Array.prototype.forEach()`
* `Set.prototype.forEach()`
Map.prototype.set()
===================

**`set()`** 메서드는 `Map` 객체에서 주어진 키와 값을 추가하거나 업데이트합니다.

시도해보기
-----

구문
--


```js
set(key, value)
```

### 매개변수

`key`

`Map` 객체에 추가되는 요소의 키. 이 키는 모든 종류의 JavaScript 타입(모든 원시형 혹은 모든 Javascript 객체)이 될 수 있습니다.

`value`

`Map` 객체에 추가되는 요소의 값. 이 값은 모든 종류의 JavaScript 타입(모든 종류의 원시형 혹은 모든 종류의 Javascript 객체)이 될 수 있습니다.

### 반환 값

`Map` 객체.

예제
--

### set() 사용하기


```js
const myMap = new Map();

// map에 새로운 요소를 추가합니다
myMap.set("bar", "foo");
myMap.set(1, "foobar");

// map에 요소를 업데이트 합니다
myMap.set("bar", "baz");
```

### 연속으로 set() 사용

`set()`메서드는 같은 `Map` 객체를 반환하기 때문에 아래와 같이 연속으로 호출할 수 있습니다.


```js
// Add new elements to the map with chaining.
myMap.set("bar", "foo").set(1, "foobar").set(2, "baz");
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-map.prototype.set |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Map`
* `Map.prototype.get()`
* `Map.prototype.has()`
Map() 생성자
=========

**`Map()`** 생성자는 `Map` 객체를 생성합니다.

구문
--


```js
new Map()
new Map(iterable)
```


**참고:** `Map()`은 오직 `new`로만 생성할 수 있습니다. `new` 없이 호출하면 `TypeError`가 발생합니다.

### 매개변수

`iterable` Optional

 하나의 `Array` 혹은 키-값 쌍인 요소를 가진
 반복 가능 객체. (예를 들어
 `[[ 1, 'one' ],[ 2, 'two' ]]`과 같이 2개의 요소를 가진 배열). 각각의 키-값 쌍은 새로운 `Map`에
 추가됩니다.


예제
--

### 새로운 Map 생성하기


```js
const myMap = new Map([
  [1, "one"],
  [2, "two"],
  [3, "three"],
]);
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-map-constructor |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* A polyfill of `Map` is available in
 `core-js`
* `Set` (en-US)
* `WeakMap`
* `WeakSet`
Uint8ClampedArray() constructor
===============================

**`Uint8ClampedArray`** 형식화 배열(TypedArray) 생성자는 0-255로 고정된 8비트 부호 없는 정수의 배열을
 생성합니다. [0,255] 범위를 벗어나는 값을 지정하면 대신 0 또는 255가 대신 설정됩니다.
 정수가 아닌 값을 지정하면 그 값과 가장 가까운 정수가 설정됩니다. 배열의 내용은 0으로 초기화됩니다. 배열이 생성되면 객체의 메서드를
 사용하거나 표준 배열 인덱스 구문(즉, 대괄호 표기법 사용)을 사용하여 배열의 요소를 참조할 수 있습니다.

구문
--


```js
new Uint8ClampedArray()
new Uint8ClampedArray(length)
new Uint8ClampedArray(typedArray)
new Uint8ClampedArray(object)

new Uint8ClampedArray(buffer)
new Uint8ClampedArray(buffer, byteOffset)
new Uint8ClampedArray(buffer, byteOffset, length)
```


**참고:** `Uint8ClampedArray()`는 오직 `new`로만 생성할 수 있습니다. `new` 없이 호출을 시도하면 `TypeError` 예외가 발생합니다.

### 매개변수

`TypedArray`를 참고하세요.

### 예외

`TypedArray`를 참고하세요.

예제
--

### Uint8ClampedArray 를 생성하기 위한 각기 다른 여러 방법


```js
// 길이로부터 생성
const uintc8 = new Uint8ClampedArray(2);
uintc8[0] = 42;
uintc8[1] = 1337;
console.log(uintc8[0]); // 42
console.log(uintc8[1]); // 255 (clamped)
console.log(uintc8.length); // 2
console.log(uintc8.BYTES\_PER\_ELEMENT); // 1

// 배열로부터 생성
const x = new Uint8ClampedArray([21, 31]);
console.log(x[1]); // 31

// 다른 TypedArray로부터 생성
const y = new Uint8ClampedArray(x);
console.log(y[0]); // 21

// ArrayBuffer로부터 생성
const buffer = new ArrayBuffer(8);
const z = new Uint8ClampedArray(buffer, 1, 4);
console.log(z.byteOffset); // 1

// 순회로부터 생성
const iterable = (function\* () {
  yield\* [1, 2, 3];
})();
const uintc8FromIterable = new Uint8ClampedArray(iterable);
console.log(uintc8FromIterable);
// Uint8ClampedArray [1, 2, 3]
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-typedarray-constructors |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `core-js`에서 `Uint8ClampedArray`의 폴리필
* JavaScript 형식화 배열
* `ArrayBuffer`
* `DataView`
Uint16Array() constructor
=========================

**`Uint16Array`** 형식화 배열(TypedArray)의 생성자는 플랫폼의 바이트 순서를 따르는 16비트 부호 없는 정수
 배열을 생성합니다.

문법
--


```js
new Uint16Array()
new Uint16Array(length)
new Uint16Array(typedArray)
new Uint16Array(object)

new Uint16Array(buffer)
new Uint16Array(buffer, byteOffset)
new Uint16Array(buffer, byteOffset, length)
```


**참고:** `Uint16Array()`는 오직 `new`로만 생성할 수 있습니다. `new` 없이 호출을 시도하면 `TypeError` 예외가 발생합니다.

### 매개변수

`TypedArray`를 참고하세요.

### 예외

`TypedArray`를 참고하세요.

예제
--

### Uint16Array를 생성하기 위한 각기 다른 여러 방법


```js
// 길이로부터 생성
const uint16 = new Uint16Array(2);
uint16[0] = 42;
console.log(uint16[0]); // 42
console.log(uint16.length); // 2
console.log(uint16.BYTES\_PER\_ELEMENT); // 2

// 배열로부터
const x = new Uint16Array([21, 31]);
console.log(x[1]); // 31

// 다른 TypedArray로부터
const y = new Uint16Array(x);
console.log(y[0]); // 21

// ArrayBuffer로부터
const buffer = new ArrayBuffer(16);
const z = new Uint16Array(buffer, 2, 4);
console.log(z.byteOffset); // 2

// 순회로부터
const iterable = (function\* () {
  yield\* [1, 2, 3];
})();
const uint16FromIterable = new Uint16Array(iterable);
console.log(uint16FromIterable);
// Uint16Array [1, 2, 3]
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-typedarray-constructors |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `core-js`에서 `Uint16Array` 폴리필
* JavaScript 형식화 배열
* `ArrayBuffer`
* `DataView`
Int16Array() constructor
========================

**`Int16Array`** 형식화 배열의 생성자는 플랫폼의 바이트 순서를 따르는 2의 보수 16비트의 부호있는 정수 배열을 생성합니다.
 바이트 순서를 제어해야 하는 경우 대신 `DataView`를 사용합니다. 배열의 내용은 0으로 초기화됩니다.
 배열이 생성되면 객체의 메서드를 사용하거나 표준 배열 인덱스 구문(즉, 대괄호 표기법 사용)을 사용하여 배열의 요소를 참조할 수 있습니다.

구문
--


```js
new Int16Array()
new Int16Array(length)
new Int16Array(typedArray)
new Int16Array(object)

new Int16Array(buffer)
new Int16Array(buffer, byteOffset)
new Int16Array(buffer, byteOffset, length)
```


> 
> **Note:** `Int16Array()`는 오직 `new`로만 생성할 수 있습니다. `new` 없이 호출을 시도하면 `TypeError` 예외가 발생합니다.
> 
> 
> 

### 매개 변수

`TypedArray`를 참고하세요.

### 예외

`TypedArray`를 참고하세요.

예제
--

### Int16Array을 생성하기 위한 각기 다른 방법


```js
// 길이로부터 생성
const int16 = new Int16Array(2);
int16[0] = 42;
console.log(int16[0]); // 42
console.log(int16.length); // 2
console.log(int16.BYTES\_PER\_ELEMENT); // 2

// 배열로부터
const x = new Int16Array([21, 31]);
console.log(x[1]); // 31

// 다른 TypedArray로부터
const y = new Int16Array(x);
console.log(y[0]); // 21

// ArrayBuffer로부터
const buffer = new ArrayBuffer(16);
const z = new Int16Array(buffer, 2, 4);
console.log(z.byteOffset); // 2

// 순회로부터
const iterable = (function\* () {
  yield\* [1, 2, 3];
})();
const int16FromIterable = new Int16Array(iterable);
console.log(int16FromIterable);
// Int16Array [1, 2, 3]
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-typedarray-constructors |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `core-js`에서 `Int16Array` 폴리필
* JavaScript 형식화 배열
* `ArrayBuffer`
* `DataView`
Boolean.prototype.valueOf()
===========================

**`valueOf()`** 메서드는 `Boolean` 객체의 원시 값을 반환합니다.

시도해보기
-----

구문
--


```js
bool.valueOf();
```

### 반환 값

`Boolean` 객체의 원시 값.

설명
--

`valueOf()` 메서드는 `Boolean` 객체나 불리언 리터럴의 원시 값을 Boolean 자료형의 값으로 반환합니다.

`valueOf()` 메서드는 보통 JavaScript 내부에서 호출하며 코드에서 명시적으로 사용하지는 않습니다.

예제
--

### `valueOf` 사용하기


```js
var x = new Boolean();
x.valueOf(); // false
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-boolean.prototype.valueof |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Object.prototype.valueOf()`
Boolean() 생성자
=============

**`Boolean()`** 생성자는 `Boolean` 객체를 생성할 때 사용합니다.

시도해보기
-----

구문
--


```js
new Boolean([value]);
```

### 매개변수

`value` Optional

`Boolean` 객체의 초깃값.

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-boolean-constructor |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* 용어 사전: Boolean
Boolean.prototype.toString()
============================

**`toString()`** 메서드는 `Boolean` 객체를 나타내는 문자열을 반환합니다.

시도해보기
-----

구문
--


```js
bool.toString();
```

### 반환 값

`Boolean` 객체를 나타내는 문자열.

설명
--

`Boolean` 객체는 `Object.prototype.toString()` 메서드를 상속받지 않고 재정의합니다. `Boolean` 객체에서 `toString()` 메서드는 객체의 문자열 표현을 반환합니다.

JavaScript는 `Boolean`을 문자열로 표현해야 할 때나 문자열 결합에 사용할 때 `toString()`을 자동으로 호출합니다.

`toString()`은 불리언 객체의 값에 따라 문자열 "`true`" 또는 "`false`"를 반환합니다.

예제
--

### `toString()` 사용하기


```js
var flag = new Boolean(true);
flag.toString(); // false
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-boolean.prototype.tostring |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Object.prototype.toString()`
SyntaxError() constructor
=========================

**`SyntaxError()`** 생성자는 `SyntaxError` 객체를 생성합니다.

구문
--


```js
new SyntaxError()
new SyntaxError(message)
new SyntaxError(message, options)
new SyntaxError(message, fileName)
new SyntaxError(message, fileName, lineNumber)

SyntaxError()
SyntaxError(message)
SyntaxError(message, options)
SyntaxError(message, fileName)
SyntaxError(message, fileName, lineNumber)
```


**참고:** `SyntaxError()`는 `new`와 함께 쓰거나 함께 쓰지 않아도 됩니다. 두 방법 모두 새로운 `SyntaxError` 인스턴스를 생성합니다.

### 매개변수

`message` Optional

사람이 읽을 수 있는 오류에 대한 설명

`options` Optional

다음의 속성을 가지는 객체

`cause` Optional

 오류의 구체적인 원인을 나타내는 속성입니다.
 보다 구체적이거나 유용한 오류 메시지가 포함된 오류를 처리 및 다시 예외를 발생시킬 때 이 속성을 사용하여 원래 오류를 전달할 수 있습니다.



`fileName` Optional 
비표준

이 예외가 발생한 코드가 초함된 파일의 이름

`lineNumber` Optional 
비표준

이 예외가 발생한 코드의 라인 수

예제
--

### SyntaxError 처리하기


```js
try {
  eval("hoo bar");
} catch (e) {
  console.log(e instanceof SyntaxError); // true
  console.log(e.message);
  console.log(e.name); // "SyntaxError"
  console.log(e.stack); // 오류 스택
}
```

### SyntaxError 만들기


```js
try {
  throw new SyntaxError("Hello");
} catch (e) {
  console.log(e instanceof SyntaxError); // true
  console.log(e.message); // "Hello"
  console.log(e.name); // "SyntaxError"
  console.log(e.stack); // 오류 스택
}
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-nativeerror-constructors |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Error`
Proxy() constructor
===================

**`Proxy`** 생성자는 `Proxy` 객체를 만드는 데 사용됩니다.

구문
--


```js
new Proxy(target, handler);
```


**참고:** `Proxy()`는 `new`로만 만들 수 있습니다. `new` 없이 호출하려고 하면 `TypeError`가 발생합니다.

### 매개변수

`target`

`Proxy`로 래핑할 대상 객체입니다. 네이티브 배열, 함수 또는 다른 프록시를 포함한 모든 종류의 객체가 될 수 있습니다.

`handler`

작업이 수행될 때 프록시의 동작을 정의하는 속성이 함수인 객체입니다.

설명
--

`Proxy()` 생성자를 사용하여 새 `Proxy` 객체를 만듭니다. 이 생성자는 두 가지 필수 인수를 사용합니다.

* `target`은 프록시를 만들려는 대상 개체입니다.
* `handler`는 작업이 수행될 때 프록시의 동작을 정의하는 속성이 함수인 객체입니다.

빈 핸들러는 거의 모든 면에서 대상 객체와 똑같은 동작을 하는 프록시가 생성되며, `handler` 객체에서 함수의 집합을 정의하여 프록시의 특정 동작을 커스텀할 수 있습니다. 예를 들어, `get()`을 정의하여 대상 속성 접근자의 사용자 정의 버전을 제공할 수 있습니다.

### Handler 함수

이 섹션에서는 정의할 수 있는 모든 처리기 함수를 나열합니다. 처리기 함수는 기본 대상 객체에 대한 호출을 가로채기 때문에 **트랩**(**traps**)이라고도 합니다.

`handler.apply()`

함수 호출에 대한 트랩.

`handler.construct()`

`new` 연산자에 대한 트랩.

`handler.defineProperty()`

`Object.defineProperty`에 대한 트랩.

`handler.deleteProperty()`

`delete` (en-US) 연산자에 대한 트랩.

`handler.get()`

속성 값을 가져오기(get) 위한 트랩.

`handler.getOwnPropertyDescriptor()`

`Object.getOwnPropertyDescriptor`에 대한 트랩.

`handler.getPrototypeOf()`

`Object.getPrototypeOf`에 대한 트랩.

`handler.has()`

`in` 연산자에 대한 트랩.

`handler.isExtensible()`

`Object.isExtensible`에 대한 트랩.

`handler.ownKeys()`

`Object.getOwnPropertyNames`와 `Object.getOwnPropertySymbols`에 대한 트랩

`handler.preventExtensions()`

`Object.preventExtensions`에 대한 트랩

`handler.set()`

속성 값 설정(set)에 대한 트랩.

`handler.setPrototypeOf()`

`Object.setPrototypeOf` (en-US)에 대한 트랩.

예제들
---

### 선택적 프록시 속성 접근자

이 예제의 대상 객체는 `notProxied`와 `proxied` 속성을 가지고 있습니다. 우리는 `proxied`에 대해 다른 값을 반환하는 처리기를 정의하고 다른 모든 액세스는 대상 객체를 통해 수행되도록 할 것입니다.


```js
const target = {
  notProxied: "original value",
  proxied: "original value",
};

const handler = {
  get(target, prop, receiver) {
    if (prop === "proxied") {
      return "replaced value";
    }
    return Reflect.get(...arguments);
  },
};

const proxy = new Proxy(target, handler);

console.log(proxy.notProxied); // "original value"
console.log(proxy.proxied); // "replaced value"
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-proxy-constructor |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* JavaScript Guided의 `Proxy`와 `Reflect` (en-US)
* `Reflect`
handler.defineProperty()
========================

**`handler.defineProperty()`** 메서드는 `Object.defineProperty()`에 대한 트랩입니다.

시도해보기
-----

구문
--


```js
new Proxy(target, {
  defineProperty(target, property, descriptor) {},
});
```

### 매개 변수

다음 매개변수는 `defineProperty()` 메서드에 전달됩니다. `this`는 처리기에 바인딩됩니다.

`target`

대상 객체

`property`

설명을 검색할 속성의 이름 또는 `Symbol`입니다.

`descriptor`

정의 또는 수정 중인 속성에 대한 설명자입니다.

### 반환 값

`handler.defineProperty()` 메서드는 속성이 성공적으로 정의되었는지를 나타내는 `불리언`을 반환합니다.

설명
--

**`handler.defineProperty()`** 메서드는 `Object.defineProperty()`에 대한 트랩입니다.

### 가로채기

이 트랩은 다음 작업을 가로챌 수 있습니다.

* `Object.prototype.__defineGetter__()`
* `Object.prototype.__defineSetter__()` (en-US)
* `Object.defineProperty()`
* `Reflect.defineProperty()`
### 불변 조건

다음 불변 조건이 위반되면 프록시에서 `TypeError`가 발생합니다.

* 대상 객체를 확장할 수 없는 경우, 속성을 추가할 수 없습니다.
* 속성이 대상 객체를 구성할 수 없는 자체 속성으로 존재하지 않는다면 속성을 구성할 수 없도록 추가하거나 수정할 수 없습니다.
* 대상 객체의 구성 가능한 속성이 있는 경우, 속성을 구성할 수 없을 수 있습니다.
* 속성에 해당 대상 개체 속성이 있는 경우 `Object.defineProperty(target, prop, descriptor)`는 예외를 발생하지 않습니다.
* 엄격 모드에서 `defineProperty()` 처리기의 `false` 반환 값은 `TypeError` 예외를 발생시킵니다.
예제
--

### defineProperty 트랩하기

다음 코드는 `Object.defineProperty()`를 트랩합니다.


```js
const p = new Proxy(
  {},
  {
    defineProperty(target, prop, descriptor) {
      console.log(`called: ${prop}`);
      return true;
    },
  },
);

const desc = { configurable: true, enumerable: true, value: 10 };
Object.defineProperty(p, "a", desc); // "호출: a"
```


`Object.defineProperty()` 또는 `Reflect.defineProperty()`를 호출할 때 `defineProperty()` 트랩에 전달된 `descriptor`에는 한 가지 제한 사항이 있어 다음 속성만 사용할 수 있습니다.(비표준 속성은 무시됨)

* `enumerable`
* `configurable`
* `writable`
* `value`
* `get`
* `set`


```js
const p = new Proxy(
  {},
  {
    defineProperty(target, prop, descriptor) {
      console.log(descriptor);
      return Reflect.defineProperty(target, prop, descriptor);
    },
  },
);

Object.defineProperty(p, "name", {
  value: "proxy",
  type: "custom",
}); // { value: 'proxy' }
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc |

브라우저 호한성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Proxy`
* `Proxy()` 생성자
* `Object.defineProperty()`
* `Reflect.defineProperty()`
handler.construct()
===================

**`handler.construct()`** 메서드는 `new` 연산자에 대한 트랩입니다. 결과 Proxy 객체에서 new 연산이 유효하려면 프록시를 초기화하는 데 사용되는 대상 객체 자체에 내부 `[[Construct]]` 메서드가 있어야 합니다(즉, `new target`이 유효해야 함).

시도해보기
-----

구문
--


```js
new Proxy(target, {
  construct(target, argumentsList, newTarget) {},
});
```

### 매개변수

다음 매개변수는 `construct()` 메서드에 전달됩니다. `this`는 처리기에 바인딩됩니다.

`target`

대상 객체.

`argumentsList`

생성자의 인수 목록.

`newTarget`

원래 호출된 생성자. `p` 위.

### 반환 값

`construct` 메서드는 반드시 객체를 반환합니다.

설명
--

**`handler.construct()`** 메서드는 `new` 연산자에 대한 트랩입니다.

### 가로채기

이 트랩은 다음 작업을 가로챌 수 있습니다.

* `new myFunction(...args)`
* `Reflect.construct()`
### 불변 조건

다음 불변 조건이 위반되면 프록시에서 `TypeError`가 발생합니다.

* 결과는 `Object`여야 합니다.
예제
--

### new 연산자 트랩하기

다음 코드는 `new` 연산자를 트랩합니다.


```js
const p = new Proxy(function () {}, {
  construct(target, argumentsList, newTarget) {
    console.log(`called: ${argumentsList}`);
    return { value: argumentsList[0] \* 10 };
  },
});

console.log(new p(1).value); // "호출: 1"
// 10
```


다음 코드는 불변 조건을 위반합니다.


```js
const p = new Proxy(function () {}, {
  construct(target, argumentsList, newTarget) {
    return 1;
  },
});

new p(); // TypeError 예외 발생
```


다음 코드는 프록시를 부적절하게 초기화합니다. 프록시 초기화의 `target` 자체는 `new` 연산에 대한 유효한 생성자여야 합니다.


```js
const p = new Proxy(
  {},
  {
    construct(target, argumentsList, newTarget) {
      return {};
    },
  },
);

new p(); // TypeError is thrown, "p" is not a constructor
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Proxy`
* `Proxy()` 생성자
* `new` 연산자.
* `Reflect.construct()`