recursal/MDN huggingface dataset:
Atomics.compareExchange()
=========================

**`Atomics.compareExchange()`** 정적 메서드는 주어진 예상 값이 이전 값과 같으면 배열의 지정된 위치에서
 지정된 대체 값을 교환합니다. 예상 값이 이전 값과 같을 경우, 배열의 지정된 위치에서 지정된 대체 값을 교환합니다.
 이 메서드는 해당 위치의 이전 값이 해당 위치의 이전 값을 반환합니다. 이 아토믹 연산은 수정된 값이 반환될 때까지 다른 쓰기가
 발생하지 않음을 보장합니다.

시도해보기
-----

구문
--


```js
Atomics.compareExchange(typedArray, index, expectedValue, replacementValue)
```

### 매개변수

`typedArray`

 정수형 형식화 배열. `Int8Array`, `Uint8Array`,
 `Int16Array`, `Uint16Array`, `Int32Array`,
 `Uint32Array`, `BigInt64Array`,
 `BigUint64Array` 중 하나.


`index`

값을 불러올 `typedArray`의 인덱스

`expectedValue`

동일성을 확인하기 위한 값

`replacementValue`

교환할 숫자

### 반환 값

주어진 위치(`typedArray[index]`)의 예전 값.

### 예외

* `typedArray`가 허용된 정수형이 아닐 경우 `TypeError`가 발생합니다.
* `index`가 `typedArray`의 범위를 벗어날 경우 `RangeError`가 발생합니다.
예제
--

### compareExchange() 사용하기


```js
const sab = new SharedArrayBuffer(1024);
const ta = new Uint8Array(sab);
ta[0] = 7;
Atomics.compareExchange(ta, 0, 7, 12); // 이전 값 7을 반환합니다
Atomics.load(ta, 0); // 12
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-atomics.compareexchange |

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

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

같이 보기
-----

* `Atomics`
* `Atomics.exchange()`
Atomics.and()
=============

**`Atomics.and()`** 정적 메서드는 배열의 지정된 위치에서 지정된 값으로 비트 연산 AND를 계산한 후 해당 위치의
 이전 값을 반환합니다. 이 아토믹 연산은 수정된 값이 다시 쓰여질 때까지 다른 쓰기가 발생하지 않도록 보장합니다.

시도해보기
-----

구문
--


```js
Atomics.and(typedArray, index, value)
```

### 매개변수

`typedArray`

 정수형 형식화 배열. `Int8Array`, `Uint8Array`,
 `Int16Array`, `Uint16Array`, `Int32Array`,
 `Uint32Array`, `BigInt64Array`,
 `BigUint64Array` 중 하나.


`index`

비트 연산 AND를 계산할 `typedArray`의 인덱스입니다.

`value`

비트 연산 AND와 같이 계산할 숫자입니다.

### 반환 값

주어진 위치(`typedArray[index]`)의 예전 값.

### 예외

* `typedArray`가 허용된 정수형이 아닐 경우 `TypeError`가 발생합니다.
* `index`가 `typedArray`의 범위를 벗어날 경우 `RangeError`가 발생합니다.
설명
--

비트 AND 연산은 `a`와 `b`가 모두 1인 경우에만 1을 산출합니다. AND 연산에 대한 진리 테이블은 다음과 같습니다.

| `a` | `b` | `a & b` |
| --- | --- | --- |
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |

예를 들어, `5 & 1`의 비트 연산 AND는 `0001`, 10진수로 1입니다.
```

5  0101
1  0001
   ----
1  0001
```

예제
--

### and() 사용하기


```js
const sab = new SharedArrayBuffer(1024);
const ta = new Uint8Array(sab);
ta[0] = 5;

Atomics.and(ta, 0, 1); // 이전 값인 5를 반환합니다
Atomics.load(ta, 0); // 1
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-atomics.and |

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

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

같이 보기
-----

* `Atomics`
* `Atomics.or()`
* `Atomics.xor()`
Atomics.store()
===============

**`Atomics.store()`** 정적 메서드는 배열의 지정된 위치에 지정된 값을 저장하고 해당 값을 반환합니다

시도해보기
-----

구문
--


```js
Atomics.store(typedArray, index, value)
```

### 매개 변수

`typedArray`

 정수형 형식화 배열. `Int8Array`, `Uint8Array`,
 `Int16Array`, `Uint16Array`, `Int32Array`,
 `Uint32Array`, `BigInt64Array`,
 `BigUint64Array` 중 하나.


`index`

`value`를 저장할 `typedArray`의 인덱스.

`value`

저장할 숫자.

### 반환 값

저장된 값.

### 예외

* `typedArray`가 허용된 정수형이 아닐 경우 `TypeError`가 발생합니다.
* `index`가 `typedArray`의 범위를 벗어날 경우 `RangeError`가 발생합니다.
예제
--

### store() 사용하기


```js
const sab = new SharedArrayBuffer(1024);
const ta = new Uint8Array(sab);

Atomics.store(ta, 0, 12); // 12
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-atomics.store |

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

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

같이 보기
-----

* `Atomics`
* `Atomics.load()`
Atomics.wait()
==============

**`Atomics.wait()`** 정적 메서드는 `Int32Array`의 지정된 위치에 지정된 값이
 여전히 포함되어 있는지 확인합니다. 만약 그러하다면 잠자기 상태로 있으면서 깨우기(wake-up) 알림을 기다리거나 시간이 만료됩니다.
 이 함수는 `"ok"`, `"not-equal"` 또는 `"timed-out"` 문자열을 반환합니다.

> 
> 
> **Note:** 이 연산은 공유 `Int32Array` 또는 `BigInt64Array`에서만
>  작동하며 메인 스레드에서는 허용되지 않을 수 있습니다.
>  이 메서드의 비차단, 비동기 버전에 대해서는 `Atomics.waitAsync()`를 참조하세요.
>  
> 
> 
> 

구문
--


```js
Atomics.wait(typedArray, index, value)
Atomics.wait(typedArray, index, value, timeout)
```

### 매개변수

`typedArray`

공유된 `Int32Array` 혹은 `BigInt64Array`.

`index`

`typedArray`에서의 대기하고 있는 인덱스.

`value`

테스트할 기대값.

`timeout` Optional

대기 시간(밀리초). 시간이 명시되지 않으면 `Infinity`입니다.

### 반환 값

`"ok"`, `"not-equal"` 혹은 `"timed-out"` 문자열

### 예외

* `typedArray`가 허용된 정수형이 아닐 경우 `TypeError`가 발생합니다.
* `index`가 `typedArray`의 범위를 벗어날 경우 `RangeError`가 발생합니다.
예제
--

### wait() 사용하기

공유된 `Int32Array`에서


```js
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);
```


 읽기 스레드는 0이 될 것으로 예상되는 위치 0에서 잠자기 상태로 대기 중입니다. 이 값이 유지되는 한 계속 진행되지 않습니다.
 그러나 쓰기 스레드가 새 값을 저장하면 쓰기 스레드에서 알림을 받고 새 값(123)을 반환합니다.


```js
Atomics.wait(int32, 0, 0);
console.log(int32[0]); // 123
```


쓰기 스레드는 새 값을 저장하고 쓰기가 완료되면 대기 중인 스레드에 알립니다:


```js
console.log(int32[0]); // 0;
Atomics.store(int32, 0, 123);
Atomics.notify(int32, 0, 1);
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-atomics.wait |

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

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

같이 보기
-----

* `Atomics`
* `Atomics.waitAsync()`
* `Atomics.notify()`
Atomics.waitAsync()
===================

**`Atomics.waitAsync()`** 정적 메서드는 공유 메모리 위치에서 비동기적으로 대기하고 `Promise`를 반환합니다.

`Atomics.wait()`와는 다르게, `waitAsync`는 논 블록킹이며 메인 스레드에서 사용할 수 있습니다.

**참고:** 이 작업은 오직 공유된 `Int32Array` 혹은 `BigInt64Array`에서만 동작합니다.

구문
--


```js
Atomics.waitAsync(typedArray, index, value)
Atomics.waitAsync(typedArray, index, value, timeout)
```

### 매개변수

`typedArray`

공유된 `Int32Array` 혹은 `BigInt64Array`.

`index`

`typedArray`에서의 대기하고 있는 인덱스.

`value`

테스트할 기대값.

`timeout` Optional

대기 시간(밀리초). 시간이 명시되지 않으면 `Infinity`입니다.

### 반환 값

다음 속성을 가진 `Object`.

* `async`
    + `value` 속성이 `Promise`인지 아닌지를 나타내는 부울입니다.
* `value`
    + `async`가 `false`이면, `"not-equal"` 또는 `"time-out"`(`timeout` 매개변수가 `0`인 경우에만) 문자열일 수 있습니다.
     `async`가 `true`이면 `"ok"` 또는 `"timed-out"` 문자열 값으로 이행되는 `Promise`가 됩니다. 프로미스는 절대 거부되지 않습니다.
예제
--

### waitAsync() 사용하기

공유된 `Int32Array`에서


```js
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);
```


읽기 스레드가 0이 될 것으로 예상되는 위치 0에서 대기 중입니다. `result.value`은 프로미스입니다.


```js
const result = Atomics.waitAsync(int32, 0, 0, 1000);
// { async: true, value: Promise {<pending>} }
```


읽기 스레드 또는 다른 스레드에서 메모리 위치 0이 호출되고 이행 결과 `"ok"` 문자열을 확인할 수 있습니다.


```js
Atomics.notify(int32, 0);
// { async: true, value: Promise {<fulfilled>: 'ok'} }
```


`"ok"`으로 확인되지 않는다면 2가지 원인이 있습니다. 첫 번째 원인은 공유 메모리 위치의 값이 예상과 다른 경우인데 이 경우 `value`는 프로미스 대신 `"not-equal"`이 될 됩니다. 두 번째 원인은 시간이 만료(타임아웃)될 경우로 프로미스 결과는 문자열 `"time-out"`입니다.

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-atomics.waitasync |

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

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

같이 보기
-----

* `Atomics`
* `Atomics.wait()`
* `Atomics.notify()`
Atomics.exchange()
==================

**`Atomics.exchange()`** 정적 메서드는 배열의 지정된 위치에 지정된 값을 저장하고 해당 위치의 이전 값을 반환합니다.
 이 아토믹 연산은 이전 값의 읽기와 새 값의 쓰기 사이에 다른 쓰기가 발생하지 않는 것을 보장합니다.

시도해보기
-----

구문
--


```js
Atomics.exchange(typedArray, index, value)
```

### 매개변수

`typedArray`

 정수 타입의 배열. `Int8Array`, `Uint8Array`,
 `Int16Array`, `Uint16Array`, `Int32Array`,
 `Uint32Array`, `BigInt64Array`,
 `BigUint64Array` 중 하나.


`index`

`value`를 교환할 `typedArray`의 위치.

`value`

교환할 숫자.

### 반환 값

해당 위치의 예전 값(`typedArray[index]`).

### 예외

* `typedArray`가 허용하는 정수 타입이 아닐 경우 `TypeError`가 발생합니다.
* `index`가 해당 `typedArray`를 벗어나는 경우 `RangeError`가 발생합니다.
예제
--

### exchange() 사용하기


```js
const sab = new SharedArrayBuffer(1024);
const ta = new Uint8Array(sab);
Atomics.exchange(ta, 0, 12); // returns 0, the old value
Atomics.load(ta, 0); // 12
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-atomics.exchange |

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

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

같이 보기
-----

* `Atomics`
* `Atomics.compareExchange()`
Atomics.sub()
=============

**`Atomics.sub()`** 정적 메서드는 배열에서 주어진 위치에 주어진 값으로 빼기 연산을 수행하고
 해당 포지션의 기존 값을 반환합니다. 이 아토믹 연산은 수정된 값이 쓰이기 전까지 다른 쓰기 연산이 일어나지 않음을 보장합니다.

시도해보기
-----

구문
--


```js
Atomics.sub(typedArray, index, value)
```

### 매개변수

`typedArray`

 정수형 형식화 배열. `Int8Array`, `Uint8Array`,
 `Int16Array`, `Uint16Array`, `Int32Array`,
 `Uint32Array`, `BigInt64Array`,
 `BigUint64Array` 중 하나.


`index`

`value`를 차감할 `typedArray`의 인덱스입니다.

`value`

차감할 값(숫자)입니다.

### 반환 값

주어진 위치(`typedArray[index]`)의 예전 값.

### 예외

* `typedArray`가 허용된 정수형이 아닐 경우 `TypeError`가 발생합니다.
* `index`가 `typedArray`의 범위를 벗어날 경우 `RangeError`가 발생합니다.
예제
--

### sub 사용하기


```js
const sab = new SharedArrayBuffer(1024);
const ta = new Uint8Array(sab);
ta[0] = 48;
Atomics.sub(ta, 0, 12); // 이전 값 48을 반환합니다.
Atomics.load(ta, 0); // 36
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-atomics.sub |

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

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

같이 보기
-----

* `Atomics`
* `Atomics.add()`
Atomics.xor()
=============

**`Atomics.xor()`** 정적 메서드는 배열에서 주어진 위치에 주어진 값으로 XOR 비트 연산을 수행하고
 해당 포지션의 기존 값을 반환합니다. 이 아토믹 연산은 수정된 값이 쓰이기 전까지 다른 쓰기 연산이 일어나지 않음을 보장합니다.

시도해보기
-----

구문
--


```js
Atomics.xor(typedArray, index, value)
```

### 매개 변수

`typedArray`

 정수형 형식화 배열. `Int8Array`, `Uint8Array`,
 `Int16Array`, `Uint16Array`, `Int32Array`,
 `Uint32Array`, `BigInt64Array`,
 `BigUint64Array` 중 하나.


`index`

비트 연산 XOR를 계산할 `typedArray`의 인덱스입니다.

`value`

비트 연산 XOR와 같이 계산할 숫자입니다.

### 반환 값

주어진 위치(`typedArray[index]`)의 예전 값.

### 예외

* `typedArray`가 허용된 정수형이 아닐 경우 `TypeError`가 발생합니다.
* `index`가 `typedArray`의 범위를 벗어날 경우 `RangeError`가 발생합니다.
설명
--

비트 연산 XOR은 `a`와 `b` 이 다르면 1을 산출합니다. XOR 연산에 대한 진리표는 다음과 같습니다.

| `a` | `b` | `a ^ b` |
| --- | --- | --- |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |

예를 들어, `5 ^ 1`의 비트 연산 XOR의 값은 `0100`이며 10진수로 4입니다.
```

5  0101
1  0001
   ----
4  0100
```

예제
--

### xor 사용하기


```js
const sab = new SharedArrayBuffer(1024);
const ta = new Uint8Array(sab);
ta[0] = 5;
Atomics.xor(ta, 0, 1); // 이전 값인 5를 반환합니다
Atomics.load(ta, 0); // 4
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-atomics.xor |

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

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

같이 보기
-----

* `Atomics`
* `Atomics.and()`
* `Atomics.or()`
Atomics.or()
============

**`Atomics.or()`** 정적 메서드는 배열에서 주어진 위치에 주어진 값으로 OR 비트 연산을 수행하고
 해당 포지션의 기존 값을 반환합니다. 이 아토믹 연산은 수정된 값이 쓰이기 전까지 다른 쓰기 연산이 일어나지 않음을 보장합니다.

시도해보기
-----

구문
--


```js
Atomics.or(typedArray, index, value)
```

### 매개변수

`typedArray`

 정수형 형식화 배열. `Int8Array`, `Uint8Array`,
 `Int16Array`, `Uint16Array`, `Int32Array`,
 `Uint32Array`, `BigInt64Array`,
 `BigUint64Array` 중 하나.


`index`

비트 연산 OR를 계산할 `typedArray`의 인덱스입니다.

`value`

비트 연산 OR와 같이 계산할 숫자입니다.

### 반환 값

주어진 위치(`typedArray[index]`)의 예전 값.

### 예외

* `typedArray`가 허용된 정수형이 아닐 경우 `TypeError`가 발생합니다.
* `index`가 `typedArray`의 범위를 벗어날 경우 `RangeError`가 발생합니다.
설명
--

비트 연산 OR은 `a`와 `b` 중 하나라도 1이면 1을 산출합니다. OR 연산에 대한 진리표는 다음과 같습니다.

| `a` | `b` | `a | b` |
| --- | --- | --- |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |

예를 들어, `5 | 1`의 비트 연산 OR의 값은 `0101`이며 10진수로 5입니다.
```

5  0101
1  0001
   ----
5  0101
```

예제
--

### or 사용하기


```js
const sab = new SharedArrayBuffer(1024);
const ta = new Uint8Array(sab);
ta[0] = 2;

Atomics.or(ta, 0, 1); // 이전 값 2를 반환합니다.
Atomics.load(ta, 0); // 3
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-atomics.or |

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

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

같이 보기
-----

* `Atomics`
* `Atomics.and()`
* `Atomics.xor()`
Float64Array() constructor
==========================

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

구문
--


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

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


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


### 매개변수

`TypedArray`를 참고하세요.

### 예외

`TypedArray`를 참고하세요.

예제
--

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


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

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

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

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

// 순회로부터 생성
const iterable = (function\* () {
  yield\* [1, 2, 3];
})();
const float64FromIterable = new Float64Array(iterable);
console.log(float64FromIterable);
// Float64Array [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`에서 `Float64Array`의 폴리필
* JavaScript 형식화 배열
* `ArrayBuffer`
* `DataView`
Error.prototype.lineNumber
==========================

**비표준:** 이 기능은 비표준이므로 실제 프로덕션에서 사용하지 마세요. 모든 사용자 환경에서 작동하지 않을 수 도 있으며, 미래에 호환성 문제가 생길 수 있습니다.

**`lineNumber`** 속성은 이 오류가 발생한 파일의 행 번호를 포함합니다.

예제
--

### lineNumber 사용하기


```js
var e = new Error("Could not parse input");
throw e;
console.log(e.lineNumber); // 2
```

### 오류 이벤트를 사용하는 또 다른 예제


```js
window.addEventListener("error", function (e) {
  console.log(e.lineNumber); // 5
});
var e = new Error("Could not parse input");
throw e;
```


이는 표준 기능이 아니며 광범위하게 지원되지 않습니다. 아래 브라우저 호환성 표를 참고하십시오.

명세
--

표준의 일부가 아닙니다.

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

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

같이 보기
-----

* `Error.prototype.stack` (en-US)
* `Error.prototype.columnNumber`
* `Error.prototype.fileName`
Error.prototype.message
=======================

**`message`** 속성은 사람이 읽을 수 있는 오류의 설명입니다.

설명
--

이 속성은 오류가 있거나 설정된 경우 오류에 대한 간략한 설명을 포함합니다. SpiderMonkey는 예외적으로 `message` 속성을 광범위하게 사용합니다. `name` 속성과 결합된 `message` 속성은 `Error.prototype.toString()` 메서드에서 오류의 문자열 표현을 생성하는 데 사용됩니다.

기본적으로 `message` 속성은 빈 문자열이지만, `Error` 생성자에 대한 첫 번째 인수로 메시지를 지정하여 인스턴스에 대해 이 동작을 재정의할 수 있습니다.

예제
--

### 사용자 정의 오류 발생시키기


```js
var e = new Error("Could not parse input");
// e.message is 'Could not parse input'
throw e;
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-error.prototype.message |

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

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

같이 보기
-----

* `Error.prototype.name`
* `Error.prototype.toString()`
Error() 생성자
===========

**`Error`** 생성자는 오류 객체를 생성합니다.

구문
--


```js
new Error();
new Error(message);
new Error(message, fileName);
new Error(message, fileName, lineNumber);
```

### 매개변수

`message` Optional

사람이 읽을 수 있는 오류 메시지입니다.

`fileName` Optional
비표준

 생성할 `Error` 객체의 `fileName` 속성으로 설정할 값입니다. 기본 값은
 `Error()` 생성자를 호출한 파일의 이름입니다.


`lineNumber` Optional
비표준

 생성할 `Error` 객체의 `lineNumber` 속성으로 설정할 값입니다. 기본 값은
 `Error()` 생성자를 호출한 줄의 번호입니다.


예제
--

### 생성자 또는 함수 호출

`Error`를 `new` 없이 함수로써 호출한 경우에도 `Error` 객체를
 반환합니다. 따라서 단순히 `Error`를 호출하기만 해도 `new` 키워드를 사용한 것과 같은 결과를
 낳습니다.


```js
// 함수로 호출해도...
const x = Error("함수 호출로 만들기!");

// ...이렇게 생성자로 사용한 것과 같은 결과
const y = new Error('"new" 키워드를 써서 만들기!');
```

명세
--

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

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

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

같이 보기
-----

* `throw`
* `try...catch` (en-US)
Error.prototype.name
====================

**`name`** 속성은 오류 타입을 설명하기 위한 이름을 나타냅니다. 초기값은 "Error"입니다.

설명
--

 기본적으로 `Error` 인스턴스에는 "Error"라는 이름을 갖습니다. `name` 속성과
 `message` 속성은 `Error.prototype.toString()` 메서드에서 오류의 문자열 표현을 생성하는 데
 사용됩니다.

예제
--

### 사용자 정의 에러 발생시키기


```js
var e = new Error("Malformed input"); // e.name은 'Error'

e.name = "ParseError";
throw e;
// e.toString()은 'ParseError: Malformed input'을 반환합니다
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-error.prototype.name |

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

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

같이 보기
-----

* `Error.prototype.message`
* `Error.prototype.toString()`
Error.prototype.columnNumber
============================

**비표준:** 이 기능은 비표준이므로 실제 프로덕션에서 사용하지 마세요. 모든 사용자 환경에서 작동하지 않을 수 도 있으며, 미래에 호환성 문제가 생길 수 있습니다.

**`columnNumber`** 속성은 이 오류가 발생한 파일의 행의 열 번호를 포함합니다.

예제
--

### columnNumber 사용하기


```js
var e = new Error("Could not parse input");
throw e;
console.log(e.columnNumber); // 0
```

명세
--

표준의 일부가 아닙니다.

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

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

See also
--------

* `Error.prototype.stack` (en-US)
* `Error.prototype.lineNumber`
* `Error.prototype.fileName`
Error.prototype.cause
=====================

**`cause`** 속성은 오류의 구체적인 원래 원인을 나타냅니다.

예외를 잡아서 다시 예외를 발생시킬 때 원래 발생한 오류에 접근 할 수 있으면서 보다 구체적인 혹은 유용한 에러 메시지를 추가할때 사용합니다.

값
-

`options.cause` 인자의 `Error()` 생성자에 전달되는 값입니다.

값은 어떤 타입이든 가능합니다. `catch`문의 변수 역시 `Error`라고 확신할 수 없는 것과 마찬가지로 여러분이 처리할 오류의 `cause`에 `Error`가 있다고 가정하지 마시기 바랍니다. 아래의 예제 "오류 원인으로 구조화된 데이터 제공"는 의도적으로 오류가 아닌 것을 `cause`로 제공하는 경우를 보여줍니다.

예제
--

### cause와 함께 오류 재발생시키기

오류를 발견하고 새 메시지로 다시 던지는 것이 유용할 수 있습니다. 이 경우 그림과 같이 새 `Error`에 대한 원래 오류를 생성자에 전달해야 합니다.


```js
try {
  connectToDatabase();
} catch (err) {
  throw new Error("Connecting to database failed.", { cause: err });
}
```


보다 자세한 예제는 Error > Differentiate between similar errors를 참조하세요.

### 오류 원인으로 구조화된 데이터 제공

사람을 위해 쓰인 오류 메시지는 기계 구문 분석에는 적합하지 않을 수 있습니다. 왜냐하면 기계 구문 분석은 단어 변경이나 구두점 변경으로도 기존 분석이 제대로 동작하지 않을 수 있기 때문입니다. 그래서 함수에서 오류를 발생시킬 때, 사람이 읽을 수 있는 오류 메시지의 대안으로 기계 구문 분석을 위해 구조화된 데이터로 원인을 제공할 수 있습니다.


```js
function makeRSA(p, q) {
  if (!Number.isInteger(p) || !Number.isInteger(q)) {
    throw new Error("RSA key generation requires integer inputs.", {
      cause: { code: "NonInteger", values: [p, q] },
    });
  }
  if (!areCoprime(p, q)) {
    throw new Error("RSA key generation requires two co-prime integers.", {
      cause: { code: "NonCoprime", values: [p, q] },
    });
  }
  // rsa algorithm…
}
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-installerrorcause |

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

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

같이 보기
-----

* `Error.prototype.message`
* `Error.prototype.toString()`
Error.prototype.toString()
==========================

**`toString()`** 메서드는 명시된 `Error` 객체를 표현하는 문자열을 반환합니다.

구문
--


```js
toString();
```

### 반환값

명시된 `Error` 객체를 표현하는 문자열.

설명
--

`Error` 객체는 모든 객체가 상속받는 `Object.prototype.toString()` 메서드를 재정의합니다.
 이 의미는 다음과 같습니다(`Object`과 `String`는 그들 만의 원본 값이 있다고 가정합니다):


```js
Error.prototype.toString = function () {
  "use strict";

  var obj = Object(this);
  if (obj !== this) {
    throw new TypeError();
  }

  var name = this.name;
  name = name === undefined ? "Error" : String(name);

  var msg = this.message;
  msg = msg === undefined ? "" : String(msg);

  if (name === "") {
    return msg;
  }
  if (msg === "") {
    return name;
  }

  return name + ": " + msg;
};
```

예제
--

### toString() 사용하기


```js
var e1 = new Error("fatal error");
console.log(e1.toString()); // 'Error: fatal error'

var e2 = new Error("fatal error");
e2.name = undefined;
console.log(e2.toString()); // 'Error: fatal error'

var e3 = new Error("fatal error");
e3.name = "";
console.log(e3.toString()); // 'fatal error'

var e4 = new Error("fatal error");
e4.name = "";
e4.message = undefined;
console.log(e4.toString()); // ''

var e5 = new Error("fatal error");
e5.name = "hello";
e5.message = undefined;
console.log(e5.toString()); // 'hello'
```

명세서
---

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

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

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

같이 보기
-----

* `Error.prototype.toSource()` (en-US)
Error.prototype.fileName
========================

**비표준:** 이 기능은 비표준이므로 실제 프로덕션에서 사용하지 마세요. 모든 사용자 환경에서 작동하지 않을 수 도 있으며, 미래에 호환성 문제가 생길 수 있습니다.

**`fileName`** 속성은 이 오류가 발생한 파일의 경로를 포함합니다.

설명
--

이 비표준 속성은 이 오류가 발생한 파일의 경로를 포함합니다. 디버거 컨텍스트(예를 들어 Firefox 개발자 도구)에서 호출할 경우, "debugger eval code" 가 반환됩니다.

예제
--

### fileName 사용하기


```js
var e = new Error("Could not parse input");
throw e;
// e.fileName could look like "file:///C:/example.html"
```

명세
--

표준의 일부가 아닙니다.

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

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

같이 보기
-----

* `Error.prototype.stack` (en-US)
* `Error.prototype.columnNumber`
* `Error.prototype.lineNumber`
Map.prototype[@@iterator]()
===========================

`Map` 객체의 **`@@iterator`** 메서드는 반복가능 프로토콜을 구현하여
 전개 구문와 `for...of` 루프같은
 반복이 필요한 대부분의 구문에서 맵을 사용할 수 있게 합니다. 맵의 키-값 쌍을 생성하는 반복자를 반환합니다.

이 속성의 초기 값은 `Map.prototype.entries` 속성의 초기 값과 동일한 함수 객체입니다.

시도해보기
-----

구문
--


```js
map[Symbol.iterator]()
```

### 반환 값

`Map.prototype.entries()`과 동일한 반환 값을 반환합니다. 이는 맵의 키-값 쌍을 생성하는
 새로운 반복자 객체입니다.

예제
--

### for...of 루프를 사용한 반복

 이 메서드를 직접 호출할 필요는 거의 없다는 점을 명심하시기 바랍니다. `@@iterator` 메서드의 존재는 `Map` 객체를
 반복 가능하게 만들고,
 `for...of` 루프와 같은 반복 구문이 자동으로 이 메서드를 호출하여 루프를 도는 반복자를 얻기 위함입니다.


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

for (const entry of myMap) {
  console.log(entry);
}
// ["0", "foo"]
// [1, "bar"]
// [{}, "baz"]

for (const [key, value] of myMap) {
  console.log(`${key}: ${value}`);
}
// 0: foo
// 1: bar
// [Object]: baz
```

### 수동으로 반복자 돌리기

반복 프로세스를 최대로 제어하기 위해 반환된 반복자 객체의 `next()` 메서드를 수동으로 호출할 수도 있습니다.


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

const mapIter = myMap[Symbol.iterator]();

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-@@iterator |

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

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

같이 보기
-----

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

**`size`** 접근자 속성은 `Map` 객체의 요소 수를 반환합니다.

시도해보기
-----

설명
--

`size` 값은 `Map` 객체에 몇 개의 항목이 있는지 나타내는 정수입니다. `size` 설정 접근자 함수는 `undefined` 이므로
 이 속성을 변경할 수 없습니다.

예제
--

### size 사용하기


```js
const myMap = new Map();
myMap.set("a", "alpha");
myMap.set("b", "beta");
myMap.set("g", "gamma");

console.log(myMap.size); // 3
```

명세서
---

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

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

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

같이 보기
-----

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

**`keys()`** 메서드는 배열에서 각 인덱스의 키를 포함하는 새로운 맵 반복자 (en-US) 객체를 반환합니다.

시도해보기
-----

구문
--


```js
keys()
```

### 반환 값

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

예제
--

### keys() 사용하기


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

const mapIter = myMap.keys();

console.log(mapIter.next().value); // "0"
console.log(mapIter.next().value); // 1
console.log(mapIter.next().value); // {}
```

명세서
---

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

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

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

같이 보기
-----

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