recursal/MDN huggingface dataset:
Int16Array
==========

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

생성자
---

`Int16Array()`

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

정적 속성
-----

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

`Int16Array.BYTES_PER_ELEMENT`

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

`Int16Array.name`

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

정적 메서드
------

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

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

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

`Int16Array.prototype.BYTES_PER_ELEMENT`

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

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

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

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

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

같이 보기
-----

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

**`GeneratorFunction` 생성자**는 새로운 `generator function` 객체를 생성한다. JavaScript 에서 모든 generator function 은 실제로 `GeneratorFunction` object 이다.

주의할 점은, `GeneratorFunction` 이 전역 객체(global object)가 아니란 점이다. GeneratorFunction은 다음의 코드를 실행해서 얻을 수 있다.


```js
Object.getPrototypeOf(function\* () {}).constructor;
```

Syntax
------


```js
new Function(arg1, functionBody)
new Function(arg1, arg2, functionBody)
new Function(arg1, ... , argN, functionBody)
```

### Parameters

`arg1, arg2, ... argN`

이 함수에서 공식적인 argument 이름들로 사용되는 이름들이다. 각각은 유효한 Javascript 식별자이거나 쉼표로 구분된 문자열 리스트에 해당되는 문자열이어야 한다; for example "`x`", "`theValue`", or "`a,b`".

`functionBody`

함수 정의를 구성하는 JavaScript 문이 포함된 문자열.

Description
-----------

`GeneratorFunction` 생성자로 생성된 `generator function` 객체는 그 함수가 생성될 때 분석한다. 이러한 함수들이 나머지 코드들과 함께 분석되기 때문에, `function* expression`으로 generator function을 선언하고 코드 내에서 호출하는 것보다 덜 효율적입니다.

그 함수로 전달된 모든 arguments는 생성될 함수 안에서 파라미터의 식별자 이름으로 그것들이 전달된 순서대로 처리된다.

**참고:** `generator function` created with the `GeneratorFunction` constructor do not create closures to their creation contexts; they always are created in the global scope. When running them, they will only be able to access their own local variables and global ones, not the ones from the scope in which the `GeneratorFunction` constructor was called. This is different from using `eval` with code for a generator function expression.

new 없이 `GeneratorFunction` 생성자를 함수처럼 사용하는 것은 생성자처럼 사용하는 것과 동일한 효과를 갖는다.

Examples
--------

### GeneratorFunction 생성자로 generator function 생성하기


```js
var GeneratorFunction = Object.getPrototypeOf(function\* () {}).constructor;
var g = new GeneratorFunction("a", "yield a \* 2");
var iterator = g(10);
console.log(iterator.next().value); // 20
```

명세서
---

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

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

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

See also
--------

* `function* function`
* `function* expression`
* `Function`
* `function statement`
* `function expression`
* Functions and function scope (en-US)
undefined
=========

 전역 **`undefined`** 속성은 `undefined` 원시 값을 나타내며,
 JavaScript의 원시 자료형 중 하나입니다.

시도해보기
-----

값
-

`undefined`의 원시 값입니다.

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

설명
--

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

최신 브라우저에서 `undefined`는 설정 불가, 쓰기 불가한 속성입니다. 그렇지 않더라도 덮어쓰는건 피하는게 좋습니다.

값을 할당하지 않은 변수는 `undefined` 자료형입니다. 메서드나 선언도 평가할 변수가 값을 할당받지 않은 경우에 `undefined`를 반환합니다. 함수는 값을 명시적으로 `반환`하지 않으면 `undefined`를 반환합니다.

**참고:** 전역 범위 이외의 모든 범위에서 식별자 (변수 이름)로 `undefined`를 사용할 수 있지만(`undefined`는 예약어 (en-US)가 아니기 때문에), 그렇게 하는 것은 매우 나쁜 생각입니다. 코드를 유지보수하고 디버깅하기 어렵게 만듭니다.


```js
// DON'T DO THIS

(() => {
  const undefined = "foo";
  console.log(undefined, typeof undefined); // foo string
})();

((undefined) => {
  console.log(undefined, typeof undefined); // foo string
})("foo");
```


예제
--

### 엄격한 일치 연산과 `undefined`

`undefined`와 엄격한 일치, 불일치 연산자를 사용해 변수에 값이 있는지 확인할 수 있습니다. 다음 코드에서 변수 `x`는 초기화되지 않았으며, `if`문은 참으로 평가됩니다.


```js
let x;
if (x === undefined) {
  // 이 문이 실행됨
} else {
  // 이 문이 실행되지 않음
}
```


**참고:**: `x == undefined`는 `x`가 `null`일 때도 참이기 때문에, 엄격한 동등 연산자(표준 동등 연산자와 반대로)를 사용해야 합니다.
 반면에, 엄격한 동등 연산자는 그렇지 않습니다. 이것은 `null`이 `undefined`하고 동일하지 않기 때문입니다.


자세한 내용은 Equality comparison and sameness 문서를 확인하세요.

### `typeof` 연산자와 `undefined`

위의 예제 대신 `typeof`를 사용할 수도 있습니다.


```js
let x;
if (typeof x === "undefined") {
  // 이 문이 실행됨
}
```


`typeof`를 사용하는 한 가지 이유는 변수가 선언되지 않은 경우 오류를 발생시키지 않기 때문입니다.


```js
// x를 선언한 적 없음
// 오류 없이 true로 평가
if (typeof x === "undefined") {
  // 이 문이 실행됨
}

// ReferenceError 발생
if (x === undefined) {
}
```


그러나 다른 방법도 있습니다. JavaScript는 정적 범위를 가지는 언어이므로, 변수의 선언 여부는 현재 컨텍스트의 코드를 읽어 알 수 있습니다.

전역 범위는 전역 객체에 바인딩되므로, 전역 컨텍스트에서 변수의 존재 유무는 `in` 연산자를 전역 객체 대상으로 실행해 알 수 있습니다. 예를들어,


```js
if ("x" in window) {
  // x가 전역으로 정의된 경우 이 문이 실행됨
}
```

### `void` 연산자와 `undefined`

`void` 연산자는 세번째 대안입니다.


```js
let x;
if (x === void 0) {
  // 이 문이 실행됨
}

// y를 이전에 선언하지 않음
if (y === void 0) {
  // throws Uncaught ReferenceError: y is not defined
}
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-undefined |

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

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

같이 보기
-----

* JavaScript의 원시 값
* `null`
Uint8ClampedArray
=================

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

생성자
---

`Uint8ClampedArray()`

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

정적 속성
-----

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

`Uint8ClampedArray.BYTES_PER_ELEMENT`

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

`Uint8ClampedArray.name`

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

정적 메서드
------

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

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

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

`Uint8ClampedArray.prototype.BYTES_PER_ELEMENT`

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

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

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

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

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

같이 보기
-----

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

**`Boolean`** 객체는 불리언 값을 감싸고 있는 객체입니다.

설명
--

첫 번째 매개변수로서 전달한 값은 필요한 경우 불리언 값으로 변환됩니다. 값이 없거나 `0`, `-0`, `null`, `false`, `NaN`, `undefined`, 빈 문자열 (`""`)이라면 객체의 초기값은 `false`가 됩니다. 문자열 `"false"`를 포함한 그 외 모든 다른 값은 초기값을 `true`로 설정합니다.

`Boolean` 객체의 `true`와 `false` 값을 원시 `Boolean` 값 `true`, `false`와 혼동해선 안됩니다.

값이 `undefined`, `null`이 아닌 **모든** 객체는 조건문에서 `true`로 계산됩니다. 이는 값이 `false`인 `Boolean` 객체도 포함합니다. 즉 아래 `if` 문의 조건은 참입니다.


```js
var x = new Boolean(false);
if (x) {
  // 이 코드는 실행됨
}
```


그러나 원시 `Boolean` 값에는 적용되지 않습니다. 따라서 아래 `if` 문의 조건은 거짓입니다.


```js
var x = false;
if (x) {
  // 이 코드는 실행되지 않음
}
```


불리언이 아닌 값을 변환할 때 `Boolean` 객체를 사용해선 안됩니다. 대신 `Boolean` 함수를 사용하세요.


```js
var x = Boolean(expression); // 추천
var x = new Boolean(expression); // 사용하지 말것
```


값이 `false`인 `Boolean` 객체를 포함한 어떠한 객체를 `Boolean` 객체의 초기값으로 넘겨주더라도 새로운 `Boolean` 객체는 `true`를 가집니다.


```js
var myFalse = new Boolean(false); // 초기값 거짓
var g = Boolean(myFalse); // 초기값 참
var myString = new String("Hello"); // 문자열 객체
var s = Boolean(myString); // 초기값 참
```


`Boolean` 원시 값의 자리에서 `Boolean` 객체를 이용해선 안됩니다.

생성자
---

`Boolean()`

`Boolean` 객체를 생성합니다.

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

`Boolean.prototype.toString()`

객체의 값에 따라 문자열 `"true"` 또는 `"false"`를 반환합니다. `Object.prototype.toString()` 메서드를 재정의합니다.

`Boolean.prototype.valueOf()`

`Boolean` 객체의 원시값을 반환합니다. `Object.prototype.valueOf()` 메서드를 재정의합니다.

예제
--

### `false` 값으로 초기화한 `Boolean` 객체 만들기


```js
var bNoParam = new Boolean();
var bZero = new Boolean(0);
var bNull = new Boolean(null);
var bEmptyString = new Boolean("");
var bfalse = new Boolean(false);
```

### `true` 값으로 초기화한 `Boolean` 객체 만들기


```js
var btrue = new Boolean(true);
var btrueString = new Boolean("true");
var bfalseString = new Boolean("false");
var bSuLin = new Boolean("Su Lin");
var bArrayProto = new Boolean([]);
var bObjProto = new Boolean({});
```

명세
--

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

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

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

같이 보기
-----

* Boolean
* 불리언 자료형
WeakSet
=======

**`WeakSet`** 객체는 약하게 유지되는(held, 잡아두는) *객체*를 컬렉션에 저장할 수 있습니다.

설명
--

`WeakSet` 객체는 객체 컬렉션입니다. `WeakSet` 내 객체는 오직 한 번만 발생할 수 있습니다. 즉, `WeakSet` 컬렉션 내에서 유일합니다.

`Set` (en-US) 객체와 주된 차이는 다음과 같습니다:

* `Set`과 달리, `WeakSet`은 **객체 만의 컬렉션**이며 모든 유형의 임의 값(의 컬렉션)은 아닙니다.
* `WeakSet`은 약합니다(*weak*): 컬렉션 내 객체 참조는 약하게 유지됩니다. `WeakSet` 내 저장된 객체에 다른 참조가 없는 경우, 쓰레기 수집(garbage collection)될 수 있습니다. 이는 또한 컬렉션 내 현재 저장된 객체 목록이 없음을 뜻합니다. `WeakSets`은 열거불가입니다.
생성자
---

`WeakSet()` (en-US)

Creates a new `WeakSet` object.

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

`WeakSet.prototype.add(value)` (en-US)

Appends `value` to the `WeakSet` object.

`WeakSet.prototype.delete(value)` (en-US)

Removes `value` from the `WeakSet`. `WeakSet.prototype.has(value)` will return `false` afterwards.

`WeakSet.prototype.has(value)` (en-US)

Returns a boolean asserting whether `value` is present in the `WeakSet` object or not.

예제
--

### `WeakSet` 객체 사용


```js
var ws = new WeakSet();
var obj = {};
var foo = {};

ws.add(window);
ws.add(obj);

ws.has(window); // true
ws.has(foo); // false, foo가 집합에 추가되지 않았음

ws.delete(window); // 집합에서 window 제거함
ws.has(window); // false, window가 제거되었음
```

명세
--

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

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

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

같이 보기
-----

* Polyfill of `WeakSet` in `core-js`
* `Map`
* `Set` (en-US)
* `WeakMap`
decodeURI()
===========

**`decodeURI()`** 함수는 `encodeURI`이나 비슷한 루틴으로 사전에 만들어진 URI(Uniform Resource Identifier, 인터넷식별자)를 디코딩합니다.

시도해보기
-----

구문
--


```js
decodeURI(encodedURI)
```

### 매개변수

`encodedURI`

완전하고 인코딩된 인터넷식별자(URI)

### 반환값

주어진 인코딩된 URI를 디코딩한 새 문자열을 반환합니다.

### 예외

`encodedURI`에 유효하지 않은 문자열이 포함된 경우 `URIError` ("malformed URI sequence") 예외가 발생합니다.

설명
--

인코딩된 URI의 각 이스케이프 시퀀스(확장문자열)를 자신을 나타내는 문자로 바꾸지만 `encodeURI`에서 도입할 수 없었던 이스케이프 시퀀스는 해독하지 않습니다. `#`문자는 이스케이프 시퀀스에서 디코딩되지 않습니다.

예제
--

### 키릴 URL 디코딩


```js
decodeURI(
  "https://developer.mozilla.org/ru/docs/JavaScript\_%D1%88%D0%B5%D0%BB%D0%BB%D1%8B",
);
// "https://developer.mozilla.org/ru/docs/JavaScript\_шеллы"
```

### 예외 처리


```js
try {
  var a = decodeURI("%E0%A4%A");
} catch (e) {
  console.error(e);
}

// URIError: malformed URI sequence
```

사양
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-decodeuri-encodeduri |

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

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

같이 보기
-----

* `decodeURIComponent()`
* `encodeURI()`
* `encodeURIComponent()`
ArrayBuffer
===========

**`ArrayBuffer`** 객체는 일반적인 고정 길이 원시 이진 데이터 버퍼를 나타냅니다.

ArrayBuffer는 바이트로 구성된 배열로, 다른 언어에서는 종종 "바이트 배열"이라고 부릅니다. `ArrayBuffer`에 담긴 정보를 직접 수정하는 것은 불가능하지만, 대신 형식화 배열이나 `DataView` 객체를 통해 버퍼를 특정 형식으로 나타내고, 이를 통해 버퍼의 내용을 읽거나 쓸 수 있습니다.

`ArrayBuffer()` 생성자는 주어진 길이(바이트)를 가진 새로운 `ArrayBuffer`를 생성합니다. Base64 문자열이나 로컬 파일 (en-US)과 같은 기존 데이터에서도 배열 버퍼를 생성할 수 있습니다.

`ArrayBuffer`는 Transferable objects (en-US)입니다.

생성자
---

`ArrayBuffer()`

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

정적 속성
-----

`get ArrayBuffer[@@species]` (en-US)

파생 개체를 만드는 데 사용되는 생성자 함수입니다.

정적 메서드
------

`ArrayBuffer.isView(arg)`

`arg` 유형이 형식화 배열 객체이거나 `DataView`와 같은 ArrayBuffer 중 하나인 경우, `true`를 반환합니다. 그렇지 않으면 `false`를 반환합니다.

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

`ArrayBuffer.prototype.byteLength`

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

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

`ArrayBuffer.prototype.slice()`

컨탠츠의 `begin`(포함)부터 `end`(제외)까지 해당 `ArrayBuffer`의 바이트 복사본인 새 `ArrayBuffer`를 반환합니다. `begin` 또는 `end`가 음수이면 처음부터가 아니라 배열 끝에서 인덱스를 참조합니다.

예제
--

### ArrayBuffer 만들기

이 예에서는 버퍼를 참조하는 `Int32Array` 뷰가 있는 8바이트 버퍼를 만듭니다.


```js
const buffer = new ArrayBuffer(8);
const view = new Int32Array(buffer);
```

명세서
---

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

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

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

같이 보기
-----

* Polyfill of `ArrayBuffer` in `core-js`
* JavaScript 형식화 배열
* `SharedArrayBuffer`
* RangeError: invalid array length
JSON
====

**`JSON`** 객체는 JavaScript Object Notation(JSON)을 분석하거나 값을 JSON으로 변환하는 메서드를 가지고 있습니다. `JSON`을 직접 호출하거나 인스턴스를 생성할 수 없으며, 두 개의 메서드를 제외하면 자신만의 흥미로운 기능은 없습니다.

JavaScript와 JSON의 차이
--------------------

JSON은 객체, 배열, 숫자, 문자열, 불리언과 `null`을 직렬화하기 위한 구문으로, JavaScript 구문에 기반을 두고 있지만 분명한 차이점을 가지고 있습니다. 즉, 어떤 JavaScript는 JSON이 아닙니다.

객체와 배열

속성의 이름은 반드시 큰따옴표로 표시된 문자열이어야 합니다. 후행 쉼표는 허용하지 않습니다.

숫자

선행 0은 허용하지 않습니다. 소숫점 뒤에는 적어도 한 자릿수가 뒤따라야 합니다. `NaN`과 `Infinity`는 지원하지 않습니다.

모든 JSON 텍스트는 유효한 JavaScript 표현식...

...이지만, 모든 JSON 텍스트를 올바른 ECMA-262로 만드는 제안을 구현한 JavaScript 엔진에서만 그러합니다. 다른 엔진에서는, U+2028 LINE SEPARATOR와 U+2029 PARAGRAPH SEPARATOR를 JSON에서 스트링 리터럴과 속성의 키로 사용할 수 있지만, JavaScript 문자열 리터럴에서 사용하면 `SyntaxError`가 발생합니다.

`JSON.parse()`로 JSON 문자열을 분석하고 `eval` (en-US)이 JavaScript 문자열로 실행하는 다음 예시를 참고하세요.


```js
const code = '"\u2028\u2029"';
JSON.parse(code); // 모든 엔진에서 "\u2028\u2029"로 평가
eval(code); // 오래된 엔진에서 SyntaxError
```


다른 차이점으로는 문자열의 작은따옴표 금지와, 주석 및 `undefined` 미지원이 있습니다. JSON에 기반한, 보다 사람 친화적인 설정 형식을 원하면 Babel 컴파일러가 사용하는 JSON5가 있고, 좀 더 많이 쓰이는 YAML도 있습니다.

전체 JSON 구문
----------


```js
    JSON = null
        or true or false
        or JSONNumber
        or JSONString
        or JSONObject
        or JSONArray

    JSONNumber = - PositiveNumber
              or PositiveNumber
    PositiveNumber = DecimalNumber
                  or DecimalNumber . Digits
                  or DecimalNumber . Digits ExponentPart
                  or DecimalNumber ExponentPart
    DecimalNumber = 0
                 or OneToNine Digits
    ExponentPart = e Exponent
                or E Exponent
    Exponent = Digits
            or + Digits
            or - Digits
    Digits = Digit
          or Digits Digit
    Digit = 0 through 9
    OneToNine = 1 through 9

    JSONString = ""
              or " StringCharacters "
    StringCharacters = StringCharacter
                    or StringCharacters StringCharacter
    StringCharacter = any character
                      except " or \ or U+0000 through U+001F
                   or EscapeSequence
    EscapeSequence = \" or \/ or \\ or \b or \f or \n or \r or \t
                  or \u HexDigit HexDigit HexDigit HexDigit
    HexDigit = 0 through 9
            or A through F
            or a through f

    JSONObject = { }
              or { Members }
    Members = JSONString : JSON
           or Members , JSONString : JSON

    JSONArray = [ ]
             or [ ArrayElements ]
    ArrayElements = JSON
                 or ArrayElements , JSON
```


중요하지 않은 공백은 `JSONNumber`(숫자에는 공백이 없어야 함) 또는 `JSONString`(문자열에서 해당 문자로 해석되거나 오류를 일으킴) 내를 제외하고 어디에나 존재할 수 있습니다. 탭 문자(U+0009), 캐리지 리턴(U+000D), 라인 피드(U+000A) 및 스페이스(U+0020) 문자만이 유효한 공백 문자입니다.

메서드
---

`JSON.parse()`

문자열을 JSON으로서 구문 분석하고, 선택적으로 분석 결과의 값과 속성을 변환해 반환합니다.

`JSON.stringify()`

주어진 값에 해당하는 JSON 문자열을 반환합니다. 선택 사항으로 특정 속성만 포함하거나 사용자 정의 방식으로 속성을 대체합니다.

명세서
---

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

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

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

같이 보기
-----

* `Date.prototype.toJSON()`
EvalError
=========

**`EvalError`** 객체는 전역 `eval()` 함수에 관한 오류를 나타냅니다. 이 예외는 JavaScript에 의해 더 이상 발생하지 않지만 `EvalError` 객체는 하위 호환성을 위해 남아있습니다.

Constructor
-----------

`EvalError()` (en-US)

Creates a new `EvalError` object.

Instance properties
-------------------

`EvalError.prototype.message`

Error message.

`EvalError.prototype.name`

Error name. Inherited from `Error`.

`EvalError.prototype.fileName`

Path to file that raised this error. Inherited from `Error`.

`EvalError.prototype.lineNumber`

Line number in file that raised this error. Inherited from `Error`.

`EvalError.prototype.columnNumber`

Column number in line that raised this error. Inherited from `Error`.

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

Stack trace. Inherited from `Error`.

예제
--

`EvalError`는 현재 ECMAScript 사양에서 사용되지 않으므로 런타임에 의해 throw되지 않습니다. 그러나 개체 자체는 이전 버전의 사양과의 하위 호환성을 유지합니다.

### Creating an EvalError


```js
try {
  throw new EvalError("Hello", "someFile.js", 10);
} catch (e) {
  console.log(e instanceof EvalError); // true
  console.log(e.message); // "Hello"
  console.log(e.name); // "EvalError"
  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-evalerror |

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

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

같이 보기
-----

* `Error`
* `eval()`
Uint16Array
===========

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

생성자
---

`Uint16Array()`

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

정적 속성
-----

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

`Uint16Array.BYTES_PER_ELEMENT`

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

`Uint16Array.name`

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

정적 메서드
------

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

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

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

`Uint16Array.prototype.BYTES_PER_ELEMENT`

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

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

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

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

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

같이 보기
-----

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

**`parseFloat()`** 함수는 주어진 값을 필요한 경우 문자열로 변환한 후 부동소수점 실수로 파싱해 반환합니다.

시도해보기
-----

구문
--


```js
parseFloat(string);
```

### 매개변수

`string`

파싱할 값입니다. 문자열이 아닐 경우 `ToString` 추상 연산을 사용해 문자열로 변환합니다. 문자열의 선행 공백은 무시합니다.

### 반환 값

주어진 문자열에서 파싱한 부동소수점 실수입니다.

공백이 아닌 첫 글자를 숫자로 변환할 수 없는 경우 `NaN`을 반환합니다.

설명
--

`parseFloat`은 전역 객체의 함수 속성입니다.

* `parseFloat`이 양의 부호(`+`), 음의 부호(`-` U+002D HYPHEN-MINUS), 숫자(`0`-`9`), 소수점(`.`), 지수(`e`, `E`) 외의 다른 글자를 발견할 경우 해당 문자 이전까지의 문자만 사용해 파싱하며 문제의 문자와 그 이후는 모두 무시합니다.
* 소수점이 두 개 이상 존재할 경우 두 번째 소수점 역시 위와 같이 무시됩니다.
* 주어진 값의 선행 및 후행 공백은 무시합니다.
* 주어진 값의 첫 글자를 숫자로 변환할 수 없는 경우 `NaN`을 반환합니다.
* `parseFloat`은 `Infinity`도 파싱 후 반환할 수 있습니다.
* `parseFloat`은 `BigInt` 구문을 `Number`로 반환하므로 정확도를 잃습니다. 마지막 `n` 문자를 무시하기 때문입니다.

더 엄격한 파싱이 필요하면, 유효하지 않은 문자가 어디에나 존재할 시 `NaN`을 반환하는 `Number(value)`를 고려하세요.

`parseFloat`은 `toString`이나 `valueOf` 메서드를 구현한 객체도 파싱할 수 있습니다. 이 때의 결과는 객체의 `toString()`, `valueOf()`의 반환 값을 `parseFloat`에 전달한 것과 동일합니다.

예제
--

### 숫자를 반환하는 경우

아래 예제는 모두 `3.14`를 반환합니다.


```js
parseFloat(3.14);
parseFloat("3.14");
parseFloat(" 3.14 ");
parseFloat("314e-2");
parseFloat("0.0314E+2");
parseFloat("3.14와 숫자가 아닌 문자들");
parseFloat({
  toString: function () {
    return "3.14";
  },
});
```

### `NaN`을 반환하는 경우

다음 예제는 `NaN`을 반환합니다.


```js
parseFloat("FF2");
```

### `parseFloat`과 `BigInt`

다음 예제는 부동소수점 실수로 표현하기엔 너무 큰 수를 받거나 `n`을 무시해서 정확도를 잃어버린 `900719925474099300`을 반환합니다.


```js
parseFloat(900719925474099267n);
parseFloat("900719925474099267n");
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-parsefloat-string |

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

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

같이 보기
-----

* `parseInt()`
* `Number.parseFloat()`
* `Number.parseInt()`
* `Number.toFixed()`
* `isNaN()`