recursal/MDN huggingface dataset:
Number.prototype.toExponential()
================================

**`toExponential()`** 메서드는 숫자를 지수 표기법으로 표기해 반환합니다.

시도해보기
-----

구문
--


```js
numObj.toExponential([fractionDigits]);
```

### 매개변수

`fractionDigits` Optional

소수점 이하로 표현할 자릿수입니다. 기본값은 주어진 값을 나타내는데 필요한 자릿수입니다.

### 반환 값

주어진 `Number` 값을 숫자 한자리와 소수점, 소수점 이하 `fractionDigits` 자릿수만큼 반올림하여 지수 표기법으로 나타낸 문자열을 반환합니다.

### 예외

`RangeError`

`fractionDigits`가 너무 작거나 너무 크면 `RangeError` 에러가 발생합니다. `fractionDigits`가 0에서 20 사이의 값이면 `RangeError` 에러는 발생하지 않습니다. 구현에 따라 더 크거나 작은 값도 사용 할 수 있습니다.

`TypeError`

`Number`가 아닌 객체가 이 메서드를 실행시키면 `RangeError` 에러가 발생합니다.

설명
--

`fractionDigits` 매개변수를 생략하면, 기본적으로 주어진 값을 특정하기 위해 필요한 자릿수만큼이 소수점 이하 자릿수가 됩니다.

지수나 소수점이 없는 숫자 리터럴에 `toExponential()` 메서드를 사용하려면, 점 앞에 공백을 두어 점이 소수점으로 해석되는 것을 막도록 합니다.

주어진 값의 자릿수가 `fractionDigits` 매개변수보다 크다면, 주어진 값은 `fractionDigits`에 가까운 자릿수로 반올림되어 표현됩니다. `toFixed()` 메서드의 반올림에 관한 설명이 `toExponential()` 메서드에도 마찬가지로 적용됩니다.

예제
--

### `toExponential` 사용하기


```js
var numObj = 77.1234;

console.log(numObj.toExponential()); // logs 7.71234e+1
console.log(numObj.toExponential(4)); // logs 7.7123e+1
console.log(numObj.toExponential(2)); // logs 7.71e+1
console.log((77.1234).toExponential()); // logs 7.71234e+1
console.log((77).toExponential()); // logs 7.7e+1
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-number.prototype.toexponential |

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

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

같이 보기
-----

* `Number.prototype.toFixed()`
* `Number.prototype.toPrecision()`
* `Number.prototype.toString()`
Number.parseInt()
=================

**`Number.parseInt()`** 메서드는 문자열 인자를 파싱하여 특정 진수(수의 진법 체계에서 기준이 되는 값)의 정수를 반환합니다.

시도해보기
-----

구문
--


```js
Number.parseInt(string);
Number.parseInt(string, radix);
```

### 매개변수

`string`

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

`radix` Optional

`string`의 진수를 나타내는 `2`부터 `36`까지의 정수입니다.

`radix`를 생략하거나 `0`을 지정한 경우, `string`이 `0x` 또는 `0X`로 시작하는 경우 `16`을 지정한 것으로 취급하고, 그 외의 경우 `10`으로 취급합니다.

### 반환 값

주어진 `string`에서 파싱한 정수입니다.

다음과 같은 경우에는 `NaN`을 반환합니다.

* `radix`가 2보다 작거나 36보다 큰 경우.
* 공백이 아닌 첫 문자를 숫자로 변환할 수 없는 경우.
설명
--

### Number.parseInt vs parseInt

`Number.parseInt()`는 전역 `parseInt()` 함수와 같은 기능을 가지고 있습니다.


```js
Number.parseInt === parseInt; // true
```


`Number.parseInt()`는 ECMAScript 2015에서 전역 객체의 모듈화를 위해 추가됐습니다. 상세한 정보와 예제는 `parseInt()`를 참고하세요.

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-number.parseint |

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

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

같이 보기
-----

* `core-js`의 `Number.parseInt` 폴리필
* 이 메서드가 속한 `Number` 객체
* 전역 `parseInt()` 메서드
Number.parseFloat()
===================

**`Number.parseFloat()`** 메서드는 주어진 값을 필요한 경우 문자열로 변환한 후 부동소수점 실수로 파싱해 반환합니다. 숫자를 파싱할 수 없는 경우 `NaN`을 반환합니다.

시도해보기
-----

구문
--


```js
Number.parseFloat(string);
```

### 매개변수

`string`

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

### 반환 값

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

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

설명
--

### Number.parseFloat vs parseFloat

`Number.parseFloat()`은 전역 `parseFloat()` 함수와 같은 기능을 가지고 있습니다.


```js
Number.parseFloat === parseFloat; // true
```


`Number.parseFloat()`은 ECMAScript 2015에서 전역 객체의 모듈화를 위해 추가됐습니다. 상세한 정보와 예제는 `parseFloat()`를 참고하세요.

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-number.parsefloat |

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

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

같이 보기
-----

* `core-js`의 `Number.parseFloat` 폴리필
* 이 메서드가 속한 `Number` 객체
* 전역 `parseFloat()` 메서드
Number.MAX\_VALUE
=================

**`Number.MAX_VALUE`** 속성은 JavaScript가 표현할 수 있는 제일 큰 양의 숫자 값을 나타냅니다.

시도해보기
-----

| Property attributes of `Number.MAX_VALUE` |
| --- |
| Writable | 불가능 |
| Enumerable | 불가능 |
| Configurable | 불가능 |

설명
--

`MAX_VALUE`의 값은 약 `1.79E+308`, 2^1024입니다. `MAX_VALUE`보다 큰 값은 `Infinity`로 표현됩니다.

`MAX_VALUE`는 `Number`의 정적 속성이기 때문에, 직접 생성한 `Number` 객체의 속성이 아니라 `Number.MAX_VALUE` 형식으로 사용해야 합니다.

예제
--

### `MAX_VALUE` 사용하기

다음 코드는 두 개의 수를 곱합니다. 만약 결과가 `MAX_VALUE` 이하면 `func1`을 호출하고, 그렇지 않으면 `func2`를 호출합니다.


```js
if (num1 \* num2 <= Number.MAX\_VALUE) {
  func1();
} else {
  func2();
}
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-number.max\_value |

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

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

참고
--

* `Number.MIN_VALUE`
Number.POSITIVE\_INFINITY
=========================

**`Number.POSITIVE_INFINITY`** 속성은 양의 무한대를 나타냅니다.

시도해보기
-----

| Property attributes of `Number.POSITIVE_INFINITY` |
| --- |
| Writable | 불가능 |
| Enumerable | 불가능 |
| Configurable | 불가능 |

설명
--

`Number.POSITIVE_INFINITY`의 값은 전역 객체 `Infinity` 속성의 값과 동일합니다.

`POSITIVE_INFINITY`는 수학에서의 무한대와 약간 다릅니다.

* `POSITIVE_INFINITY`를 포함한 아무 양의 수와 `POSITIVE_INFINITY`를 곱한 결과는 `POSITIVE_INFINITY`입니다.
* `NEGATIVE_INFINITY`를 포함한 아무 음의 수와 `POSITIVE_INFINITY`를 곱한 결과는 `NEGATIVE_INFINITY`입니다.
* 아무 양의 수를 `POSITIVE_INFINITY`로 나눈 결과는 0입니다.
* 아무 음의 수를 `POSITIVE_INFINITY`로 나눈 결과는 음의 부호를 가진 0입니다.
* 0을 `POSITIVE_INFINITY`로 나눈 결과는 `NaN`입니다.
* `NaN`에 `POSITIVE_INFINITY`를 곱한 결과는 `NaN`입니다.
* `POSITIVE_INFINITY`를, `NEGATIVE_INFINITY`를 제외한 아무 음의 수로 나눈 결과는 `NEGATIVE_INFINITY`입니다.
* `POSITIVE_INFINITY`를, `POSITIVE_INFINITY`를 제외한 아무 양의 수로 나눈 결과는 `NEGATIVE_INFINITY`입니다.
* `POSITIVE_INFINITY`를 `NEGATIVE_INFINITY` 또는 `POSITIVE_INFINITY`로 나눈 결과는 `NaN`입니다.

`Number.POSITIVE_INFINITY`를 사용해 성공 시 유한수를 반환하는 식의 결과를 판별할 수 있습니다. 그러나 이런 경우 `isFinite()`를 사용하는 편이 더 적합합니다.

`POSITIVE_INFINITY`는 `Number`의 정적 속성이기 때문에, 직접 생성한 `Number` 객체의 속성이 아니라 `Number.POSITIVE_INFINITY`의 형식으로 사용해야 합니다.

예제
--

### `POSITIVE_INFINITY` 사용하기

다음 코드에서 `bigNumber`는 JavaScript의 최댓값보다 큰 값을 할당받습니다. `if` 문이 실행되면, `bigNumber`의 값이 `Infinity`이므로 `bigNumber`는 계산에 좀 더 적합한 유한값을 다시 할당합니다.


```js
var bigNumber = Number.MAX\_VALUE \* 2;

if (bigNumber === Number.POSITIVE\_INFINITY) {
  bigNumber = returnFinite();
}
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-number.positive\_infinity |

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

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

같이 보기
-----

* `Number.NEGATIVE_INFINITY`
* `Number.isFinite()`
* `Infinity`
* `isFinite()`
Number.isNaN()
==============

**`Number.isNaN()`** 메서드는 주어진 값이 `NaN`인지 판별합니다. 기존부터 존재한 전역 `isNaN()` 함수의 더 엄격한 버전입니다.

시도해보기
-----

구문
--


```js
Number.isNaN(value);
```

### 매개변수

`value`

`NaN`인지 판별할 값.

### 반환 값

주어진 값의 유형이 `Number`이고 값이 `NaN`이면 `true`, 아니면 `false`.

설명
--

`NaN`이 `NaN`인지 계산할 때, 두 동일 연산자 `==`과 `===` 모두 `false`로 평가되므로 값의 `NaN` 여부를 알아내려면 `Number.isNaN()`이 필요합니다. 이 상황은 다른 모든 JavaScript와 다른 특별한 경우입니다.

전역 `isNaN()` 함수와 달리, `Number.isNaN()`은 강제로 매개변수를 숫자로 변환하는 문제를 겪지 않습니다. 이는 이제 보통`NaN`으로 변환됐을 값이 안전하게 전달되지만, 실제로는 `NaN`과 같은 값이 아님을 의미합니다. 이는 또한 오직 숫자형이고 또한 `NaN`인 값만이 `true`를 반환함을 뜻합니다.

예제
--


```js
Number.isNaN(NaN); // true
Number.isNaN(Number.NaN); // true
Number.isNaN(0 / 0); // true

// 예를 들면 이들은 global isNaN()으로는 true가 됐을 것임
Number.isNaN("NaN"); // false
Number.isNaN(undefined); // false
Number.isNaN({}); // false
Number.isNaN("blabla"); // false

// 모두
Number.isNaN(true);
Number.isNaN(null);
Number.isNaN(37);
Number.isNaN("37");
Number.isNaN("37.37");
Number.isNaN("");
Number.isNaN(" ");
```

폴리필
---


```js
Number.isNaN =
  Number.isNaN ||
  function (value) {
    return value !== value;
  };
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-number.isnan |

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

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

같이 보기
-----

* `Number`
* `isNaN()`
Number.EPSILON
==============

**`Number.EPSILON`** 속성(property)은 `Number` 형으로 표현될 수 있는 1과 1보다 큰 값 중에서 가장 작은 값의, 차입니다.

당신은 이 정적 속성에 접근하기 위하여 `Number` 객체를 생성할 필요가 없습니다. `Number.EPSILON`을 쓰면 됩니다.

| Property attributes of `Number.EPSILON` |
| --- |
| Writable | 불가능 |
| Enumerable | 불가능 |
| Configurable | 불가능 |

설명
--

이 `EPSILON` 속성은 대략 `2.2204460492503130808472633361816E-16` 또는 `2^-52`의 값을 갖습니다.

예제
--

### 동일성 확인하기


```js
const x = 0.2,
  y = 0.3,
  z = 0.1;
let equal = Math.abs(x - y + z) < Number.EPSILON;
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-number.epsilon |

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

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

관련된 문서
------

* 이 속성을 가지고 있는 `Number` 객체
Number.isInteger()
==================

**`Number.isInteger()`** 메서드는 주어진 값이 정수인지 판별합니다.

시도해보기
-----

구문
--


```js
Number.isInteger(value);
```

### 매개변수

`value`

정수인지 확인하려는 값.

### 반환 값

주어진 값의 정수 여부를 나타내는 `Boolean`.

설명
--

매개변수의 값이 정수면 `true`를, 아니면 `false`를 반환합니다. 값이 `NaN`이거나 `Infinity`여도 `false`를 반환합니다.

예제
--


```js
Number.isInteger(0); // true
Number.isInteger(1); // true
Number.isInteger(-100000); // true
Number.isInteger(99999999999999999999999); // true

Number.isInteger(0.1); // false
Number.isInteger(Math.PI); // false

Number.isInteger(NaN); // false
Number.isInteger(Infinity); // false
Number.isInteger(-Infinity); // false
Number.isInteger("10"); // false
Number.isInteger(true); // false
Number.isInteger(false); // false
Number.isInteger([1]); // false
```

폴리필
---


```js
Number.isInteger =
  Number.isInteger ||
  function (value) {
    return (
      typeof value === "number" &&
      isFinite(value) &&
      Math.floor(value) === value
    );
  };
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-number.isinteger |

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

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

같이 보기
-----

* 메서드가 속한 `Number` 객체.
Number.NaN
==========

**`Number.NaN`** 속성은 Not-A-Number(숫자가 아님)를 나타냅니다. `NaN`과 같습니다.

시도해보기
-----

정적 속성이므로 접근하기 위해 `Number` 객체를 생성할 필요는 없습니다. (`Number.NaN` 사용)

| Property attributes of `Number.NaN` |
| --- |
| Writable | 불가능 |
| Enumerable | 불가능 |
| Configurable | 불가능 |

예제
--

### 값이 숫자형인지 확인하기


```js
function sanitise(x) {
  if (isNaN(x)) {
    return Number.NaN;
  }
  return x;
}
```

### NaN에 대한 테스트

`NaN` 페이지에서 NaN에 대한 테스트 를 참고하세요.

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-number.nan |

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

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

같이보기
----

* 전역 `NaN` 객체.
* 본 속성이 속한 `Number` 객체.
Number.MAX\_SAFE\_INTEGER
=========================

**`Number.MAX_SAFE_INTEGER`** 상수는 JavaScript에서 안전한 최대 정수값을 나타냅니다. (`2^53 - 1`).

시도해보기
-----

| Property attributes of `Number.MAX_SAFE_INTEGER` |
| --- |
| Writable | 불가능 |
| Enumerable | 불가능 |
| Configurable | 불가능 |

설명
--

`MAX_SAFE_INTEGER` 상수는 `9007199254740991`(9,007,199,254,740,991 또는 약 9000조)의 값을 갖고 있습니다. 이 값의 이유는 JavaScript가 IEEE 754에 기술된 배정밀도 부동소숫점 형식 숫자체계를 사용하기 때문으로, 이로 인해 `-(2^53 - 1)`과 `2^53 - 1` 사이의 수만 안전하게 표현할 수 있습니다.

여기서의 안전함이란 정수를 정확하고 올바르게 비교할 수 있음을 의미합니다. 예를 들어 `Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2`는 참으로 평가되며 이는 수학적으로 올바르지 않습니다. 더 자세한 내용은 `Number.isSafeInteger()`를 참고하세요.

`MAX_SAFE_INTEGER`는 `Number`의 정적 속성이기 때문에, 직접 생성한 `Number` 객체의 속성이 아니라 `Number.MAX_SAFE_INTEGER` 형식으로 사용해야 합니다.

예제
--


```js
Number.MAX\_SAFE\_INTEGER; // 9007199254740991
Number.MAX\_SAFE\_INTEGER \* Number.EPSILON; // 2 because in floating points, the value is actually the decimal trailing "1"
// except for in subnormal precision cases such as zero
```

폴리필
---


```js
if (!Number.MAX\_SAFE\_INTEGER) {
  Number.MAX\_SAFE\_INTEGER = Math.pow(2, 53) - 1; // 9007199254740991
}
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-number.max\_safe\_integer |

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

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

같이 보기
-----

* `Number.MIN_SAFE_INTEGER`
* `Number.isSafeInteger()`
* `BigInt`
Number() 생성자
============

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

구문
--


```js
new Number(value);
```

### 매개변수

`value`

만들어질 객체의 숫자 값.

예제
--

### Number 객체 만들기


```js
const a = new Number("123"); // a === 123 은 거짓
const b = Number("123"); // b === 123 은 참
a instanceof Number; // 참
b instanceof Number; // 참
```

명세
--

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

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

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

같이 보기
-----

* 최신 `Number` 동작(2진수와 8진수를 지원하는)의 폴리필은 `core-js`를 참고하세요
* `NaN`
* `Math` 전역 객체
* 임의 정밀도 정수: `BigInt`
Number.prototype.toFixed()
==========================

**`toFixed()`** 메서드는 숫자를 고정 소수점 표기법(fixed-point notation)으로 표시합니다.

시도해보기
-----

구문
--


```js
numObj.toFixed([digits]);
```

### 매개변수

`digits` Optional

소수점 뒤에 나타날 자릿수. 0 이상 20 이하의 값을 사용할 수 있으며, 구현체에 따라 더 넓은 범위의 값을 지원할 수도 있습니다. 값을 지정하지 않으면 0을 사용합니다.

### 반환 값

고정 소수점 표기법을 사용하여 나타낸 수를 문자열로 바꾼 값.

### 예외

`RangeError`

`digits`가 너무 작거나 너무 클 때. 값이 0과 100사이의 값이라면 `RangeError`를 유발하지 않습니다. 구현체에 따라 더 크거나 작은 값을 지원할 수 있습니다.

`TypeError`

`Number`가 아닌 객체에서 호출한 경우.

설명
--

`toFixed()`는 `Number` 객체를 주어진 `digits` 만큼의 소수점 이하 자리수를 정확하게 갖는 문자열 표현으로 반환합니다. 소수점 이하가 길면 숫자를 반올림하고, 짧아서 부족할 경우 뒤를 0으로 채울 수 있습니다. 메서드를 호출한 숫자의 크기가 1e+21보다 크다면 `Number.prototype.toString()`을 호출하여 받은 지수 표기법 결과를 대신 반환합니다.

예제
--

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


```js
var numObj = 12345.6789;

numObj.toFixed(); // Returns '12346': 반올림하며, 소수 부분을 남기지 않습니다.
numObj.toFixed(1); // Returns '12345.7': 반올림합니다.
numObj.toFixed(6); // Returns '12345.678900': 빈 공간을 0으로 채웁니다.
(1.23e20).toFixed(2); // Returns '123000000000000000000.00'
(1.23e-10).toFixed(2); // Returns '0.00'
(2.34).toFixed(1); // Returns '2.3'
(2.35).toFixed(1); // Returns '2.4'. 이 경우에는 올림을 합니다.
-(2.34).toFixed(1); // Returns -2.3 (연산자의 적용이 우선이기 때문에, 음수의 경우 문자열로 반환하지 않습니다...)
(-2.34).toFixed(1); // Returns '-2.3' (...괄호를 사용할 경우 문자열을 반환합니다.)
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-number.prototype.tofixed |

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

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

참조
--

* `Number.prototype.toExponential()`
* `Number.prototype.toPrecision()`
* `Number.prototype.toString()`
Number.prototype.valueOf()
==========================

**`valueOf()`** 메서드는 `Number` 객체가 감싼(wrapped) 원시 값을 반환합니다.

시도해보기
-----

구문
--


```js
numObj.valueOf();
```

### 반환 값

`Number` 객체의 원시 값.

설명
--

`valueOf()` 메서드는 보통 JavaScript에 의해 내부적으로 호출되고, 웹 코드에서는 명시적으로 호출하지 않습니다.

예제
--

### `valueOf` 사용하기


```js
var numObj = new Number(10);
console.log(typeof numObj); // object

var num = numObj.valueOf();
console.log(num); // 10
console.log(typeof num); // number
```

명세
--

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

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

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

같이 보기
-----

* `Number.prototype.toSource()` (en-US)
Number.isSafeInteger()
======================

**`Number.isSafeInteger()`** 메서드는 전달된 값이 안전한 정숫값인지 확인합니다.

시도해보기
-----

안전한 정숫값이란 다음과 같습니다.

* IEEE-754 배정도수 형태로 정확히 표현될 수 있는 수이고
* IEEE-754 표현에 맞게 반올림하는 다른 정수의 결과가 아닌 IEEE-754 표현.

예를 들어, `2^53 - 1`은 안전한 정수입니다. 이 정수는 정확히 표현될 수 있으며, IEEE-754 반올림 모드에서 다른 정숫값이 이 값을 반올림하지 않습니다. 반면에, `2^53` 는 안전하지 않은 정수입니다. 이 정수는 정확히 IEEE-754로 표현될 수 있지만, 정수 `2^53 + 1`은 IEEE-754로 직접 표현될 수 없으며 가까운 수로 반올림하는 것과 0으로 반올림하는 것으로 `2^53`을 반올림합니다.

안전한 정숫값은 `-(2^53 - 1)` 부터 `2^53 - 1` 사이의 모든 정수값으로 구성됩니다.

구문
--


```js
Number.isSafeInteger(testValue);
```

### 매개변수

`testValue`

안전한 정수인지 확인할 값.

### 반환 값

주어진 값이 안전한 정숫값인지 나타내는 `Boolean`.

예시
--


```js
Number.isSafeInteger(3); // true
Number.isSafeInteger(Math.pow(2, 53)); // false
Number.isSafeInteger(Math.pow(2, 53) - 1); // true
Number.isSafeInteger(NaN); // false
Number.isSafeInteger(Infinity); // false
Number.isSafeInteger("3"); // false
Number.isSafeInteger(3.1); // false
Number.isSafeInteger(3.0); // true
```

폴리필
---


```js
Number.isSafeInteger =
  Number.isSafeInteger ||
  function (value) {
    return (
      Number.isInteger(value) && Math.abs(value) <= Number.MAX\_SAFE\_INTEGER
    );
  };
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-number.issafeinteger |

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

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

같이 보기
-----

* 메서드가 속한 `Number` 객체.
* `Number.MIN_SAFE_INTEGER`
* `Number.MAX_SAFE_INTEGER`
Number.MIN\_VALUE
=================

**`Number.MIN_VALUE`** 속성은 JavaScript가 표현할 수 있는 제일 작은 양의 숫자 값을 나타냅니다.

시도해보기
-----

| Property attributes of `Number.MIN_VALUE` |
| --- |
| Writable | 불가능 |
| Enumerable | 불가능 |
| Configurable | 불가능 |

설명
--

`MIN_VALUE` 속성은 JavaScript에서 표현할 수 있는, 0에 가장 가깝지만 음수는 아닌 수입니다.

`MIN_VALUE`의 값은 약 `5e-324`입니다. `MIN_VALUE`보다 작은 값("언더플로우 값")은 0으로 변환됩니다.

`MIN_VALUE`는 `Number`의 정적 속성이기 때문에, 직접 생성한 `Number` 객체의 속성이 아니라 `Number.MIN_VALUE` 형식으로 사용해야 합니다.

예제
--

### `MIN_VALUE` 사용하기

다음 코드는 숫자를 두 개의 수를 받아 나누기 연산을 합니다. 만약 결과가 `MIN_VALUE` 보다 크거나 같으면 `func1` 함수를 호출하고, 그렇지 않으면 `func2` 함수를 호출합니다.


```js
if (num1 / num2 >= Number.MIN\_VALUE) {
  func1();
} else {
  func2();
}
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-number.min\_value |

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

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

같이 보기
-----

* `Number.MAX_VALUE`
Number.isFinite()
=================

**`Number.isFinite()`** 메서드는 주어진 값이 유한수인지 판별합니다.

시도해보기
-----

구문
--


```js
Number.isFinite(value);
```

### 매개변수

`value`

유한수인지 판별할 값.

### 반환 값

유한수 여부에 대한 `Boolean` 값.

설명
--

전역 함수 `isFinite()`와 비교했을 때, `Number.isFinite()` 메서드는 매개변수를 숫자로 변환하지 않습니다. 즉 값이 숫자이며 동시에 유한수일 때만 `true`를 반환합니다.

예제
--


```js
Number.isFinite(Infinity); // false
Number.isFinite(NaN); // false
Number.isFinite(-Infinity); // false

Number.isFinite(0); // true
Number.isFinite(2e64); // true

Number.isFinite("0"); // false
// 전역함수 isFinite('0')라면 true
Number.isFinite(null); // false
// 전역함수 isFinite(null)라면 true
```

폴리필
---


```js
if (Number.isFinite === undefined)
  Number.isFinite = function (value) {
    return typeof value === "number" && isFinite(value);
  };
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-number.isfinite |

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

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

같이 보기
-----

* 메서드가 속한 `Number` 객체.
* 전역 함수 `isFinite`.
Symbol.toPrimitive
==================

**`Symbol.toPrimitive`** 정적 데이터 속성은 잘 알려진 심볼 `@@toPrimitive`를 나타냅니다.
 모든 타입 강제 변환 알고리즘은 객체에서 이 심볼을 찾아서 선호하는 유형을 허용하고 객체의 원시 표현을 반환하는 메서드를 찾은 다음 객체의 `valueOf()` 및 `toString()` 메서드를 다시 사용합니다.

시도해보기
-----

값
-

잘 알려진 심볼 `@@toPrimitive`.

| Property attributes of `Symbol.toPrimitive` |
| --- |
| Writable | 불가능 |
| Enumerable | 불가능 |
| Configurable | 불가능 |

설명
--

 함수 값으로 사용되는 `Symbol.toPrimitive` 속성의 도움으로 객체를 원시 값으로 변환할 수 있습니다.
 함수는 결과로 나온 원시 값의 선호 유형을 지정하는 문자열 인수 `hint`와 함께 호출됩니다. `hint` 인수는 `"number"` `"string"`, `"default"`중 하나일 수 있습니다.

`"number"` 힌트는 숫자 강제 알고리즘에서 사용됩니다. `"string"` 힌트는 문자열 강제 알고리즘에서 사용됩니다. `"default"` 힌트는 원시형 강제 알고리즘에서 사용됩니다. `hint`는 `Symbol.prototype[@@toPrimitive]()`와 같이 선호 사항정도로만 작용하며, 구현은 이를 무시할 수 있습니다. 언어에서는 `hint`와 결과 유형 간의 정렬을 강제하지 않지만, `[@@toPrimitive]()`는 원시형을 반환해야 하며, 그렇지 않으면 `TypeError`가 발생합니다.

`@@toPrimitive` 속성이 없는 객체는 `valueOf()` 및 `toString()` 메서드를 다른 순서로 호출하여 원시형으로 변환되며, 이에 대한 자세한 설명은 타입 강제 섹션에서 확인할 수 있습니다.
 `@@toPrimitive`를 사용하면 윈시형 변환 절차를 완전히 제어할 수 있습니다. 예를 들어, `Date.prototype[@@toPrimitive]`는 `"default"`를 `"string"`으로 취급하여 `valueOf()` 대신 `toString()`을 호출합니다.
 `Symbol.prototype[@@toPrimitive]`는 힌트를 무시하고 항상 심볼을 반환하므로 문자열 컨텍스트에서도 `Symbol.prototype.toString()`이 호출되지 않으며, `Symbol` 객체는 항상 `String()` (en-US)을 통해 명시적으로 문자열로 변환해야 합니다.

예제
--

### 객체에서 변환된 원시값 수정하기

다음 예제에서는 `Symbol.toPrimitive` 속성이 객체에서 변환된 원시값을 수정하는 방법을 설명합니다.


```js
// Symbol.toPrimitive 속성이 없는 객체.
const obj1 = {};
console.log(+obj1); // NaN
console.log(`${obj1}`); // "[object Object]"
console.log(obj1 + ""); // "[object Object]"

// Symbol.toPrimitive 속성이 있는 객체.
const obj2 = {
  [Symbol.toPrimitive](hint) {
    if (hint === "number") {
      return 10;
    }
    if (hint === "string") {
      return "hello";
    }
    return true;
  },
};
console.log(+obj2); // 10 — hint is "number"
console.log(`${obj2}`); // "hello" — hint is "string"
console.log(obj2 + ""); // "true" — hint is "default"
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-symbol.toprimitive |

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

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

같이 보기
-----

* Polyfill of `Symbol.toPrimitive` in `core-js`
* `Date.prototype[@@toPrimitive]()`
* `Symbol.prototype[@@toPrimitive]()`
* `Object.prototype.toString()`
* `Object.prototype.valueOf()`
Symbol() 생성자
============

**`Symbol()`** 함수는 타입 Symbol의 원시 값을 반환합니다.

시도해보기
-----

구문
--


```js
Symbol()
Symbol(description)
```


**참고:** `Symbol()`은 오직 `new`를 사용하지 않고 호출해야 합니다.
 `new`와 함께 생성하려하면 `TypeError`가 발생합니다.


### 매개변수

`description` Optional

문자열. 디버깅에는 사용할 수 있지만 심볼 자체에 접근하기 위해 사용할 수 없는, 심볼에 대한 설명입니다.

예제
--

### Symbol 생성하기

새로운 원시 심볼을 만들기 위해서는 아래와 같이 설명으로 사용할 선택적 문자열과 함께 `Symbol()`을 사용하면 됩니다.


```js
const sym1 = Symbol();
const sym2 = Symbol("foo");
const sym3 = Symbol("foo");
```


 위의 코드는 세 개의 새로운 심볼을 생성합니다. `Symbol("foo")`는 문자열 `"foo"`를 강제로 심볼로 만들지 않습니다.
 매번 새로운 심볼을 생성합니다.


```js
Symbol("foo") === Symbol("foo"); // false
```

### new Symbol()

`new` 연산자를 사용한 아래 구문은 `TypeError`를 발생시킵니다.


```js
const sym = new Symbol(); // TypeError
```


 이는 작성자가 새 심볼 값 대신 명시적인 `Symbol` 래퍼 개체를 만드는 것을 방지하며 원시 데이터 타입을 중심으로 명시적인 래퍼 개체를
 만드는 것이 일반적으로 가능하기 때문에 놀랄 수 있습니다(예: `new Boolean`, `new String` and `new Number`).

정말로 `Symbol` 래퍼 객체를 생성하려면 `Object()` 함수를 사용할 수 있습니다.


```js
const sym = Symbol("foo");
const symObj = Object(sym);
typeof sym; // "symbol"
typeof symObj; // "object"
```

명세서
---

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

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

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

같이 보기
-----

* Polyfill of `Symbol` in `core-js`
Symbol.prototype.description
============================

`Symbol` 값의 **`description`** 접근자 속성은 이 심볼에 대한 설명이 포함된 문자열을
 반환하거나 설명이 없는 경우 `undefined`를 반환합니다.

시도해보기
-----

설명
--

`Symbol` 객체는 디버깅에 사용할 수 있지만 심볼 자체에 접근하는 데는 사용할 수 없는 선택적인 설명과 함께 생성할 수 있습니다.
 `Symbol.prototype.description` 속성은 해당 설명을 읽는 데 사용할 수 있습니다. 이 속성은 둘러싸는
 `"Symbol()"` 문자열을 포함하지 않으므로 `Symbol.prototype.toString()`과 다릅니다. 예제를 참조하세요.

예제
--

### description 사용하기


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

// well-known symbols
Symbol.iterator.toString(); // "Symbol(Symbol.iterator)"
Symbol.iterator.description; // "Symbol.iterator"

// global symbols
Symbol.for("foo").toString(); // "Symbol(foo)"
Symbol.for("foo").description; // "foo"
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-symbol.prototype.description |

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

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

같이 보기
-----

* Polyfill of `Symbol.prototype.description` in `core-js`
* `Symbol.prototype.toString()`
* Polyfill: https://npmjs.com/symbol.prototype.description