recursal/MDN huggingface dataset:
BigInt64Array
=============

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

생성자
---

`BigInt64Array()`

새로운 `BigInt64Array` 객체를 생성합니다.

정적 속성
-----

부모 `TypedArray`에서 정적 속성을 상속합니다.

`BigInt64Array.BYTES_PER_ELEMENT`

요소 크기를 숫자로 반환합니다. `BigInt64Array`의 경우 `8` 입니다.

`BigInt64Array.name`

`BigInt64Array` 타입의 경우 `"BigInt64Array"`입니다.

정적 메서드
------

부모 `TypedArray`에서 정적 메서드를 상속합니다.

인스턴스 속성
-------

부모 `TypedArray`에서 인스턴스 속성을 상속합니다.

`BigInt64Array.prototype.BYTES_PER_ELEMENT`

요소 크기를 숫자로 반환합니다. `BigInt64Array`의 경우 `8` 입니다.

인스턴스 메서드
--------

부모 `TypedArray`에서 인스턴스 메서드를 상속합니다.

예제
--

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


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

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

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

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

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

명세
--

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

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

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

같이 보기
-----

* JavaScript 형식화 배열
* `BigUint64Array`
* `DataView`
SyntaxError
===========

**`SyntaxError`** 객체는 문법적으로 잘못된 코드를 해석하려고 시도할 때 발생하는 오류를 나타냅니다.
 JavaScript 엔진이 코드를 구문 분석할 때 언어의 구문에 맞지 않는 토큰이나 토큰 순서를 만나면 이 에러를 발생시킵니다.

`SyntaxError`는 직렬화 가능한 객체이므로 `structuredClone()`으로 복제하거나 `postMessage()` (en-US)를 사용하여 Worker 간에 복사할 수 있습니다.

`SyntaxError`는 `Error`의 하위 클래스입니다.

생성자
---

`SyntaxError()`

새로운 `SyntaxError` 객체를 만듭니다.

인스턴스 속성
-------

또한 부모 `Error`에서 인스턴스 속성을 상속합니다.

아래 속성은 `SyntaxError.prototype`에서 정의되었고, 모든 `SyntaxError` 인스턴스애서 공유됩니다.

`SyntaxError.prototype.constructor`

인스턴스 객체를 생성하는 생성자 함수입니다. `SyntaxError` 인스턴스의 경우 초기 값은 `SyntaxError` 생성자입니다.

`SyntaxError.prototype.name`

오류 유형의 이름을 나타냅니다. `SyntaxError.prototype.name`의 경우 초기 값은 `"SyntaxError"`입니다.

인스턴스 메서드
--------

부모 `Error`에서 인스턴스 메서드를 상속합니다.

예제
--

### `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-native-error-types-used-in-this-standard-syntaxerror |

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

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

같이 보기
-----

* `Error`
AggregateError
==============

**`AggregateError`** 객체는 다수의 오류가 한 오류로 포장되어야 할 때의 오류를 나타냅니다.
 한 작업에서 여러 개의 오류가 보고될 때 발생하는데, 대표적으로 `Promise.any()` (en-US)에 전달된 모든
 프로미스가 거부되었을 때 발생합니다.

`AggregateError`은 `Error`의 하위 클래스 입니다.

생성자
---

`AggregateError()`

새로운`AggregateError` 객체를 생성합니다.

인스턴스 속성
-------

인스턴스 속성은 부모인 `Error`로부터 상속받습니다.

아래 속성은 `AggregateError.prototype`에 정의되어 있으며 모든 인스턴스 객체와 공유합니다.

`AggregateError.prototype.constructor`

 인스턴스 객체를 생성하는 생성자 함수입니다. `AggregateError` 인스턴스에서 초기 값은
 `AggregateError` 생성자입니다.


`AggregateError.prototype.name`

오류의 유형에 대한 이름을 나타냅니다. `AggregateError.prototype.name`의 초기 값은 `"AggregateError"`입니다.

아래 속성은 `AggregateError` 인스턴스의 자체 속성입니다.

`errors`

집계된 오류를 나타내는 배열입니다.

인스턴스 메서드
--------

인스턴스 메서드는 부모인 `Error`로부터 상속받습니다.

예제
--

### AggregateError 처리하기


```js
Promise.any([Promise.reject(new Error("some error"))]).catch((e) => {
  console.log(e instanceof AggregateError); // true
  console.log(e.message); // "All Promises rejected"
  console.log(e.name); // "AggregateError"
  console.log(e.errors); // [ Error: "some error" ]
});
```

### AggregateError 발생시키기


```js
try {
  throw new AggregateError([new Error("some error")], "Hello");
} catch (e) {
  console.log(e instanceof AggregateError); // true
  console.log(e.message); // "Hello"
  console.log(e.name); // "AggregateError"
  console.log(e.errors); // [ Error: "some error" ]
}
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-aggregate-error-objects |

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

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

같이 보기
-----

* Polyfill of `AggregateError` in `core-js`
* `Error`
* `Promise.any` (en-US)
Float64Array
============

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

생성자
---

`Float64Array()`

새로운 `Float64Array` 객체를 생성합니다.

정적 속성
-----

부모 `TypedArray`에서 정적 속성을 상속합니다.

`Float64Array.BYTES_PER_ELEMENT`

요소 크기를 숫자로 반환합니다. `Float64Array`의 경우 `8` 입니다.

`Float64Array.name`

생성자 이름을 문자열로 반환합니다. `Float64Array` 타입의 경우 `"Float64Array"`입니다.

정적 메서드
------

부모 `TypedArray`에서 정적 메서드를 상속합니다.

인스턴스 속성
-------

부모 `TypedArray`에서 인스턴스 속성을 상속합니다.

`Float64Array.prototype.BYTES_PER_ELEMENT`

요소 크기를 숫자로 반환합니다. `Float64Array`의 경우 `8` 입니다.

인스턴스 메서드
--------

부모 `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 # table-49 |

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

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

같이 보기
-----

* `core-js`에서 `Float64Array`의 폴리필
* JavaScript 형식화 배열
* `ArrayBuffer`
* `DataView`
SharedArrayBuffer
=================

**`SharedArrayBuffer`** 객체는 제네릭, 고정된 길이의 원시 바이너리 데이터 버퍼를 표현하는데 사용됩니다. `ArrayBuffer` 객체와 유사하지만, 공유된 메모리상의 뷰를 생성하는데 사용될 수 있습니다. `ArrayBuffer` 와는 달리, `SharedArrayBuffer` 는 분리될 수 없습니다.

**참고:** Spectre 에대한 응답으로 2018년 1월 5일에 `SharedArrayBuffer` 는 모든 주요 브라우저에서 기본적으로 비활성화되어있음을 참고하세요. Chrome 은 사이트 격리 기능을 사용하여 Spectre 스타일 취약점으로부터 보호될 수 있는 플랫폼상의 v67 에서 이를 다시 활성화하였습니다.

시도해보기
-----

구문
--


```js
new SharedArrayBuffer(length);
```

### 파라미터

`length`

생성할 array buffer 의 바이트 크기.

### 반환 값

크기가 지정된 새로운 `SharedArrayBuffer` 객체입니다. 컨텐츠는 0 으로 초기화됩니다.

설명
--

### 할당 및 메모리 공유

`SharedArrayBuffer` 객체를 사용해 메모리를 하나의 agent(agent 는 웹 페이지의 메인 프로그램 또는 웹 워커 중 하나입니다)와 다른 agent 에서 공유하기 위해, `postMessage` (en-US) 와 structured cloning 이 사용됩니다.

Structured clone 알고리즘은 `SharedArrayBuffer` 와 `SharedArrayBuffer` 상에 맵핑된 `TypedArray` 를 받아들입니다. 이 두 경우에서, `SharedArrayBuffer` 객체는 수신자(receiver)에게 전달되어 수신 agent(예, `ArrayBuffer`)의 새로운 비공개의 SharedArrayBuffer 객체를 생성합니다. 하지만, 두 `SharedArrayBuffer` 에 의해 참조되는 공유 데이터 블록은 같은 블록이며, 부수적인 효과로, 하나의 agent 가 다른 agent 에서 보이게 됩니다.


```js
var sab = new SharedArrayBuffer(1024);
worker.postMessage(sab);
```

### Atomic operation 으로 공유 메모리 수정 및 동기화

공유 메모리는 워커나 메인 스레드에서 동시에 수정 및 생성할 수 있습니다. 시스템(CPU, OS, 브라우저)에따라 변경사항이 전체 컨텍스트로 전파될때까지 약간의 시간이 필요합니다. 동기화를 위해선, atomic 연산이 필요합니다.

### `SharedArrayBuffer` 객체를 사용할 수 있는 API

* `WebGLRenderingContext.bufferData()`
* `WebGLRenderingContext.bufferSubData()` (en-US)
* `WebGL2RenderingContext.getBufferSubData()` (en-US)
### 생성자는 `new` 연산자를 필요로 함

`SharedArrayBuffer` 생성자는 생성될 때, `new` 연산자를 필요로 합니다. `SharedArrayBuffer` 생성자를 new 없이 함수로써 호출하면, `TypeError` 를 일으킬 것 입니다.


```js
var sab = SharedArrayBuffer(1024);
// TypeError: calling a builtin SharedArrayBuffer constructor
// without new is forbidden
```



```js
var sab = new SharedArrayBuffer(1024);
```

속성
--

`SharedArrayBuffer.length`

값이 1인 `SharedArrayBuffer` 생성자의 length 속성입니다.

`SharedArrayBuffer.prototype` (en-US)

모든 `SharedArrayBuffer` 객체에 프로퍼티 추가를 가능하게 해줍니다.

`SharedArrayBuffer` prototype 객체
--------------------------------

모든 `SharedArrayBuffer` 인스턴스는 `SharedArrayBuffer.prototype` (en-US) 를 상속합니다.

### 속성

`SharedArrayBuffer.prototype.byteLength` (en-US)

배열의 크기 (바이트)입니다. 이것은 배열이 구성 될 때 설정되며 변경할 수 없습니다. 읽기 전용입니다.

### 메소드

`SharedArrayBuffer.prototype.slice(begin, end)` (en-US)

Returns a new `SharedArrayBuffer` whose contents are a copy of this `SharedArrayBuffer`'s bytes from `begin`, inclusive, up to `end`, exclusive. `begin` 또는 `end` 중 하나가 음수이면 처음부터가 아니라 배열 끝의 인덱스를 참조합니다.

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-sharedarraybuffer-objects |

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

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

함께 보기
-----

* `Atomics`
* `ArrayBuffer`
* JavaScript 형식화 배열
* Web Workers
* parlib-simple – 동기화 및 작업 분리 추상화를 제공하는 간단한 라이브러리.
* Shared Memory – 간단한 튜토리얼
* A Taste of JavaScript's New Parallel Primitives – Mozilla Hacks
InternalError
=============

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

**`InternalError`** 객체는 JavaScript 엔진 내부에서 발생한 오류를 나타냅니다.

다음의 오류 예시의 경우는 일반적으로 어떤 값이 너무 큰 경우입니다.

* "too many switch cases", (swich case의 수가 너무 많음)
* "too many parentheses in regular expression", (정규표현식에 너무 많은 괄호가 있음)
* "array initializer too large", (배열 초기화 값이 너무 큼)
* "too much recursion". (너무 많은 재귀 호출)
생성자
---

`InternalError()` (en-US)

새로운 `InternalError` 객체를 만듭니다.

인스턴스 속성
-------

`InternalError.prototype.message`

오류 메시지. `Error`로부터 상속되었습니다.

`InternalError.prototype.name`

오류 이름. `Error`로부터 상속되었습니다.

`InternalError.prototype.fileName`

오류가 발생한 파일 경로. `Error`로부터 상속되었습니다.

`InternalError.prototype.lineNumber`

오류가 발생한 곳의 줄 번호. `Error`로부터 상속되었습니다.

`InternalError.prototype.columnNumber`

오류가 발생한 행의 열 번호. `Error`로부터 상속되었습니다.

`InternalError.prototype.stack` (en-US)

스택 추적. `Error`로부터 상속되었습니다.

예제
--

### 너무 많은 재귀 호출

이 재귀 함수는 종료 조건에 따라 10번 수행됩니다.


```js
function loop(x) {
  if (x >= 10) {
    // "x >= 10" 는 종료 조건입니다.
    return;
  }
  // 어떤 코드
  loop(x + 1); // 재귀 호출
}
loop(0);
```


이 조건을 매우 높은 값으로 설정하면 작동하지 않습니다:


```js
function loop(x) {
  if (x >= 1000000000000) return;
  // 어떤 코드
  loop(x + 1);
}
loop(0);

// InternalError: too much recursion(너무 많은 재귀 호출)
```


더 많은 정보를 보려면 InternalError: too much recursion(너무 많은 재귀 호출)를 보시길 바랍니다.

명세
--

어떤 표준에도 속하지 않습니다.

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

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

같이 보기
-----

* `Error`
* InternalError: too much recursion(너무 많은 재귀 호출)
URIError
========

**`URIError`** 객체는 전역 URI 핸들링 함수가 잘못된 방식으로 사용되었을 때의 오류를 표현합니다.

생성자
---

`URIError()`

새로운 `URIError` 객체를 만듭니다.

인스턴스 속성
-------

`URIError.prototype.message`

 오류 메시지. 비록 ECMA-262에서 `RangeError`는 반드시 자체 `message` 속성을 제공해야한다고 명시했지만,
 SpiderMonkey는 `Error.prototype.message`를 상속합니다.


`URIError.prototype.name`

오류 이름. `Error`로부터 상속되었습니다.

`URIError.prototype.fileName`

오류가 발생한 파일 경로. `Error`로부터 상속되었습니다.

`URIError.prototype.lineNumber`

오류가 발생한 곳의 줄 위치. `Error`로부터 상속되었습니다.

`URIError.prototype.columnNumber`

오류가 발생한 곳의 열 위치. `Error`로부터 상속되었습니다.

`URIError.prototype.stack` (en-US)

스택 추적. `Error`로부터 상속되었습니다.

예제
--

### URIError 잡아내기


```js
try {
  decodeURIComponent("%");
} catch (e) {
  console.log(e instanceof URIError); // true
  console.log(e.message); // "malformed URI sequence"
  console.log(e.name); // "URIError"
  console.log(e.fileName); // "Scratchpad/1"
  console.log(e.lineNumber); // 2
  console.log(e.columnNumber); // 2
  console.log(e.stack); // "@Scratchpad/2:2:3\n"
}
```

### URIError 생성하기


```js
try {
  throw new URIError("Hello", "someFile.js", 10);
} catch (e) {
  console.log(e instanceof URIError); // true
  console.log(e.message); // "Hello"
  console.log(e.name); // "URIError"
  console.log(e.fileName); // "someFile.js"
  console.log(e.lineNumber); // 10
  console.log(e.columnNumber); // 0
  console.log(e.stack); // "@Scratchpad/2:2:9\n"
}
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-native-error-types-used-in-this-standard-urierror |

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

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

같이 보기
-----

* `Error`
* `decodeURI()`
* `decodeURIComponent()`
* `encodeURI()`
* `encodeURIComponent()`
Uint32Array
===========

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

생성자
---

`Uint32Array()`

새로운 `Uint32Array` 객체를 생성합니다.

정적 속성
-----

부모 `TypedArray`에서 정적 속성을 상속합니다.

`Uint32Array.BYTES_PER_ELEMENT`

요소 크기를 숫자로 반환합니다. `Uint32Array`의 경우 `4` 입니다.

`Uint32Array.name`

생성자 이름을 문자열로 반환합니다. `Uint32Array` 타입의 경우 `"Uint32Array"`입니다.

정적 메서드
------

부모 `TypedArray`에서 정적 메서드를 상속합니다.

인스턴스 속성
-------

부모 `TypedArray`에서 인스턴스 속성을 상속합니다.

`Uint32Array.prototype.BYTES_PER_ELEMENT`

요소 크기를 숫자 값으로 반환합니다. `Uint32Array`의 경우 `4`입니다.

인스턴스 메서드
--------

부모 `TypedArray`에서 인스턴스 메서드를 상속합니다.

예제
--

### Uint32Array을 생성하기 위한 각기 다른 여러 방법


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

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

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

// ArrayBuffer로부터
const buffer = new ArrayBuffer(32);
const z = new Uint32Array(buffer, 4, 4);
console.log(z.byteOffset); // 4

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

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # table-49 |

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

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

같이 보기
-----

* `core-js`에서 `Uint32Array` 폴리필
* JavaScript 형식화 배열
* `ArrayBuffer`
* `DataView`
ReferenceError
==============

**`ReferenceError`** 객체는 현재 범위에서 존재하지 않거나 초기화되지 않은 변수를 참조했을 때 발생하는 에러를 나타냅니다.

`ReferenceError`는 직렬화 가능한 객체이기 때문에, `structuredClone()` 혹은 Workers 사이에서 `postMessage()` (en-US)를 사용하여 복사할 수 있습니다.

생성자
---

`ReferenceError()`

새로운 `ReferenceError` 객체를 생성합니다.

인스턴스 속성
-------

`ReferenceError.prototype.message`

오류 메시지. `Error`에서 상속되었습니다.

`ReferenceError.prototype.name`

오류 이름. `Error`에서 상속되었습니다.

`ReferenceError.prototype.cause`

오류 원인. `Error`에서 상속되었습니다.

`ReferenceError.prototype.fileName` 
비표준

오류가 발생한 파일 경로. `Error`에서 상속되었습니다.

`ReferenceError.prototype.lineNumber` 
비표준

오류가 발생한 곳의 파일 내 줄 수. `Error`에서 상속되었습니다.

`ReferenceError.prototype.columnNumber` 
비표준

오류가 발생한 곳의 줄에서 열 위치. `Error`에서 상속되었습니다..

`ReferenceError.prototype.stack` (en-US) 
비표준

스택 추적. `Error`에서 상속되었습니다.

예제
--

### ReferenceError 처리하기


```js
try {
  let a = undefinedVariable;
} catch (e) {
  console.log(e instanceof ReferenceError); // true
  console.log(e.message); // "undefinedVariable is not defined"
  console.log(e.name); // "ReferenceError"
  console.log(e.fileName); // "Scratchpad/1"
  console.log(e.lineNumber); // 2
  console.log(e.columnNumber); // 6
  console.log(e.stack); // "@Scratchpad/2:2:7\n"
}
```

### ReferenceError 생성하기


```js
try {
  throw new ReferenceError("Hello", "someFile.js", 10);
} catch (e) {
  console.log(e instanceof ReferenceError); // true
  console.log(e.message); // "Hello"
  console.log(e.name); // "ReferenceError"
  console.log(e.fileName); // "someFile.js"
  console.log(e.lineNumber); // 10
  console.log(e.columnNumber); // 0
  console.log(e.stack); // "@Scratchpad/2:2:9\n"
}
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-native-error-types-used-in-this-standard-referenceerror |

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

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

같이 보기
-----

* `Error`
Infinity
========

**`Infinity`** 전역 속성은 무한대를 나타내는 숫자 값입니다.

시도해보기
-----

값
-

`Number.POSITIVE_INFINITY`와 동일한 숫자 값입니다.

| Property attributes of `Infinity` |
| --- |
| Writable | 불가능 |
| Enumerable | 불가능 |
| Configurable | 불가능 |

설명
--

`Infinity`는 전역 객체의 속성입니다. 즉, 전역 범위의 변수입니다.

`Infinity`(양의 무한대)는 다른 어떤 수보다 더 큽니다. 수학적인 무한대와는 일부 차이점이 있습니다. `Number.POSITIVE_INFINITY` 문서에서 더 알아보세요.

예제
--

### Infinity 사용하기


```js
console.log(Infinity); /\* Infinity \*/
console.log(Infinity + 1); /\* Infinity \*/
console.log(Math.pow(10, 1000)); /\* Infinity \*/
console.log(Math.log(0)); /\* -Infinity \*/
console.log(1 / Infinity); /\* 0 \*/
console.log(1 / 0); /\* Infinity \*/
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-value-properties-of-the-global-object-infinity |

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

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

같이 보기
-----

* `Number.NEGATIVE_INFINITY`
* `Number.POSITIVE_INFINITY`
* `Number.isFinite`
Math
====

**`Math`** 는 수학적인 상수와 함수를 위한 속성과 메서드를 가진 내장 객체입니다. 함수 객체가 아닙니다.

`Math`는 `Number` 자료형만 지원하며 `BigInt`와는 사용할 수 없습니다.

설명
--

다른 전역 객체와 달리 `Math`는 생성자가 아닙니다. `Math`의 모든 속성과 메서드는 정적입니다. 파이 상수는 `Math.PI`로 참조할 수 있고, 사인 함수는 매개변수 `x`에 대해 `Math.sin(x)`와 같이 호출할 수 있습니다. 상수는 JavaScript에서 가능한 최대 실수 정밀도로 정의되어 있습니다.

속성
--

`Math.E`

오일러의 상수이며 자연로그의 밑. 약 `2.718`.

`Math.LN2`

`2`의 자연로그. 약 `0.693`.

`Math.LN10`

`10`의 자연로그. 약 `2.303`.

`Math.LOG2E`

밑이 `2`인 로그 E. 약 `1.443`.

`Math.LOG10E`

밑이 `10`인 로그 E. 약 `0.434`.

`Math.PI`

원의 둘레와 지름의 비율. 약 `3.14159`.

`Math.SQRT1_2`

½의 제곱근. 약 `0.707`.

`Math.SQRT2`

`2`의 제곱근. 약 `1.414`.

메서드
---

**참고:** **참고:** 삼각 함수(`sin()`, `cos()`, `tan()`, `asin()`, `acos()`, `atan()`, `atan2()`)는 매개변수와 반환값 모두 호도법(라디안)을 사용합니다.

라디안 값을 각도 값으로 변환하려면 `(Math.PI / 180)`으로 나누세요. 반대로 각도 값에 곱하면 라디안 값이 됩니다.

**참고:** 많은 수의 `Math` 함수 정확도는 구현에 따라 다를 수 있습니다.

즉, 각 브라우저의 결과가 다를 수 있으며, 서로 같은 JS 엔진이라도 운영체제나 아키텍쳐에 따라서 불일치하는 값을 반환할 수 있습니다.

`Math.abs(x)`

숫자의 절댓값을 반환합니다.

`Math.acos(x)`

숫자의 아크코사인 값을 반환합니다.

`Math.acosh(x)`

숫자의 쌍곡아크코사인 값을 반환합니다.

`Math.asin(x)` (en-US)

숫자의 아크사인 값을 반환합니다.

`Math.asinh(x)` (en-US)

숫자의 쌍곡아크사인 값을 반환합니다.

`Math.atan(x)` (en-US)

숫자의 아크탄젠트 값을 반환합니다.

`Math.atanh(x)` (en-US)

숫자의 쌍곡아크탄젠트 값을 반환합니다.

`Math.atan2(y, x)` (en-US)

인수 몫의 아크탄젠트 값을 반환합니다.

`Math.cbrt(x)`

숫자의 세제곱근을 반환합니다.

`Math.ceil(x)`

인수보다 크거나 같은 수 중에서 가장 작은 정수를 반환합니다.

`Math.clz32(x)` (en-US)

주어진 32비트 정수의 선행 0 개수를 반환합니다.

`Math.cos(x)` (en-US)

숫자의 코사인 값을 반환합니다.

`Math.cosh(x)` (en-US)

숫자의 쌍곡코사인 값을 반환합니다.

`Math.exp(x)`

E^x 를 반환합니다. *x*는 인수이며 E 는 오일러 상수(`2.718`...) 또는 자연로그의 밑입니다.

`Math.expm1(x)` (en-US)

`exp(x)`에서 `1`을 뺀 값을 반환합니다.

`Math.floor(x)`

인수보다 작거나 같은 수 중에서 가장 큰 정수를 반환합니다.

`Math.fround(x)`

인수의 가장 가까운 단일 정밀도 표현을 반환합니다.

`Math.hypot([x[, y[, …]]])` (en-US)

인수의 제곱합의 제곱근을 반환합니다.

`Math.imul(x, y)`

두 32비트 정수의 곱을 반환합니다.

`Math.log(x)`

숫자의 자연로그(e를 밑으로 하는 로그, 즉 ln) 값을 반환합니다.

`Math.log1p(x)` (en-US)

숫자 `x`에 대해 `1 + x`의 자연로그(e를 밑으로 하는 로그, ln) 값을 반환합니다.

`Math.log10(x)`

숫자의 밑이 10인 로그를 반환합니다.

`Math.log2(x)`

숫자의 밑이 2인 로그를 반환합니다.

`Math.max([x[, y[, …]]])`

0개 이상의 인수에서 제일 큰 수를 반환합니다.

`Math.min([x[, y[, …]]])`

0개 이상의 인수에서 제일 작은 수를 반환합니다.

`Math.pow(x, y)`

x의 y 제곱을 반환합니다.

`Math.random()`

0과 1 사이의 난수를 반환합니다.

`Math.round(x)`

숫자에서 가장 가까운 정수를 반환합니다.

`Math.sign(x)`

x의 양의 수인지 음의 수인지 나타내는 부호를 반환합니다.

`Math.sin(x)`

숫자의 사인 값을 반환합니다.

`Math.sinh(x)`

숫자의 쌍곡사인 값을 반환합니다.

`Math.sqrt(x)`

숫자의 제곱근을 반환합니다.

`Math.tan(x)`

숫자의 탄젠트 값을 반환합니다.

`Math.tanh(x)`

숫자의 쌍곡탄젠트 값을 반환합니다.

`Math.toSource()` 
비표준

문자열 `"Math"`를 반환합니다.

`Math.trunc(x)`

숫자의 정수 부분을 반환합니다.

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-math-object |

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

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

같이 보기
-----

* `Number`
encodeURI()
===========

**`encodeURI()`** 함수는 URI의 특정한 문자를 UTF-8로 인코딩해 하나, 둘, 셋, 혹은 네 개의 연속된 이스케이프 문자로 나타냅니다. (두 개의 대리 문자로 이루어진 문자만 이스케이프 문자 네 개로 변환됩니다.)

시도해보기
-----

구문
--


```js
encodeURI(URI);
```

### 매개변수

`URI`

완전한 URI.

### 반환 값

주어진 문자열을 URI로서 인코딩한 새로운 문자열.

설명
--

`encodeURI()` 함수는 URI에서 특별한 뜻을 가진 문자(예약 문자)는 인코딩 하지 않습니다. 아래 예제는 "URI 도식"이 포함할 수 있는 모든 부분을 담고 있습니다. 일부 문자가 어떤 방식으로 특별한 의미를 주입하고 있는지 잘 살펴보세요.
```

http://username:password@www.example.com:80/path/to/file.php?foo=316&bar=this+has+spaces#anchor
```


따라서 `encodeURI()`는 완전한 URI를 형성하는데 필요한 문자는 인코딩 **하지 않습니다**. 또한, 예약된 목적을 가지지는 않지만 URI가 그대로 포함할 수 있는 몇 가지 문자("비예약 표식")도 인코딩 **하지 않습니다**. (RFC 2396을 참고하세요)

`encodeURI()` 는 다음 문자를 **제외**한 문자를 이스케이프 합니다.
```

이스케이프 하지 않는 문자:

    A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #
```


`encodeURI()`와 `encodeURIComponent()`의 차이는 다음과 같습니다.


```js
var set1 = ";,/?:@&=+$#"; // 예약 문자
var set2 = "-\_.!~\*'()"; // 비예약 표식
var set3 = "ABC abc 123"; // 알파벳 및 숫자, 공백

console.log(encodeURI(set1)); // ;,/?:@&=+$#
console.log(encodeURI(set2)); // -\_.!~\*'()
console.log(encodeURI(set3)); // ABC%20abc%20123 (공백은 %20으로 인코딩)

console.log(encodeURIComponent(set1)); // %3B%2C%2F%3F%3A%40%26%3D%2B%24%23
console.log(encodeURIComponent(set2)); // -\_.!~\*'()
console.log(encodeURIComponent(set3)); // ABC%20abc%20123 (공백은 %20으로 인코딩)
```


`encodeURI()` 혼자서는 `XMLHttpRequest` 등이 사용할, 적합한 HTTP `GET`과 `POST` 요청을 구성할 수 없습니다. `GET`과 `POST`에서 특별한 문자로 취급하는 `"&"`, `"+"`, `"="`를 인코딩 하지 않기 때문입니다. 그러나 `encodeURIComponent()`는 저 세 문자도 인코딩 대상에 포함합니다.

상위-하위 쌍을 이루지 않은 단일 대리 문자를 인코딩 시도하면 `URIError`가 발생합니다.


```js
// high-low pair ok
console.log(encodeURIComponent("\uD800\uDFFF"));

// lone high surrogate throws "URIError: malformed URI sequence"
console.log(encodeURIComponent("\uD800"));

// lone low surrogate throws "URIError: malformed URI sequence"
console.log(encodeURIComponent("\uDFFF"));
```


또한, URL의 보다 최신 RFC인 RFC3986을 따르고자 한다면, 대괄호가 IPv6 지원을 위해 추가로 예약됨에 따라 `encodeURI()`가 인코딩하지 않으므로 URL을 생성할 때 주의해야 합니다. 다음 예시 코드가 도움이 될 수도 있습니다.


```js
function fixedEncodeURI(str) {
  return encodeURI(str).replace(/%5B/g, "[").replace(/%5D/g, "]");
}
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-encodeuri-uri |

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

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

같이 보기
-----

* `decodeURI`
* `encodeURIComponent`
* `decodeURIComponent`