JavaScript 숫자

JavaScript에는 하나의 숫자 타입만 있습니다.

숫자를 쓸 때 소수점을 포함할 수도 있고 포함하지 않을 수도 있습니다.

JavaScript 숫자

JavaScript 숫자는 소수점을 포함하여 쓸 수도 있고, 포함하지 않을 수도 있습니다:

예제

var x = 3.14;    // 소수점 있는 숫자
var y = 3;       // 소수점 없는 숫자

직접 시도해보세요

매우 크거나 매우 작은 수는 과학적 표기법으로 쓸 수 있습니다:

예제

var x = 123e5;    // 12300000
var y = 123e-5;   // 0.00123

직접 시도해보세요

JavaScript 수치는 항상 64비트 부동소수점입니다

대부분의 다른 프로그래밍 언어와 달리, JavaScript는 정수, 짧은 정수, 긴 정수, 부동소수점 등 다른 수 유형을 정의하지 않습니다.

JavaScript 수치는 항상 더블 프리미엄 부동소수점으로 저장되며, 국제 IEEE 754 표준에 따릅니다.

이 형식은 64비트로 수치를 저장하며, 0에서 51까지는 숫자(부분)를 저장하고, 52에서 62까지는 지수를 저장하고, 63비트는 시그너를 저장합니다:

값(소수점 또는 분수) 지수 시그너
52 비트(0 - 51) 11 비트 (52 - 62) 1 비트 (63)

정밀도

소수점이 없는 정수(지수나 과학적 표기법을 사용하지 않음)는 15자리 정확합니다.

예제

var x = 999999999999999;   // x는 999999999999999이 될 것입니다;
var y = 9999999999999999;  // y는 10000000000000000이 될 것입니다;

직접 시도해보세요

소수점의 최대 수는 17자리입니다만, 부동소수점의 수학은 항상 100% 정확하지 않습니다:

예제

var x = 0.2 + 0.1;         // x는 0.30000000000000004이 될 것입니다;

직접 시도해보세요

위 문제를 해결하는 데 도움이 되는 곱셈과 나눗셈을 사용하세요:

예제

var x = (0.2 * 10 + 0.1 * 10) / 10;       // x는 0.3이 될 것입니다;

직접 시도해보세요

숫자와 문자열을 더하는 경우

경고!!

JavaScript의 덧셈과 연결(연결)은 모두 + 연산자를 사용합니다.

숫자는 덧셈을 사용합니다. 문자열은 연결을 사용합니다.

두 숫자를 더하면 숫자가 됩니다:

예제

var x = 10;
var y = 20;
var z = x + y;           // z는 30(수)이 될 것입니다;

직접 시도해보세요

두 문자열을 더하면 문자열 연결이 됩니다:

예제

var x = "10";
var y = "20";
var z = x + y;           // z는 1020(문자열)이 될 것

직접 시도해보세요

숫자와 문자열을 더하면 결과도 문자열 연결됩니다:

예제

var x = 10;
var y = "20";
var z = x + y;           // z는 1020(문자열)이 될 것입니다;

직접 시도해보세요

如果您对一个字符串和一个数字相加,结果也是字符串级联:

예제

var x = "10";
var y = 20;
var z = x + y;           // z는 1020(문자열)이 될 것

직접 시도해보세요

常见的错误是认为结果应该是 30:

예제

var x = 10;
var y = 20;
var z = "The result is: " + x + y;

직접 시도해보세요

常见的错误是认为结果应该是 102030:

예제

var x = 10;
var y = 20;
var z = "30";
var result = x + y + z;

직접 시도해보세요

JavaScript 从左向右进行编译。

因为 x 和 y 都是数,10 + 20 将被相加。

因为 z 是字符串,30 + "30" 被级联。

数字字符串

JavaScript 字符串可以拥有数字内容:

var x = 100;         // x는 숫자
var y = "100";       // y는 문자열

在所有数字运算中,JavaScript 会尝试将字符串转换为数字:

该例如此运行:

var x = "100";
var y = "10";
var z = x / y;       // z는 10이 될 것

직접 시도해보세요

该例也将如此运行:

var x = "100";
var y = "10";
var z = x * y;       // z는 1000이 될 것

직접 시도해보세요

该例如此运行:

var x = "100";
var y = "10";
var z = x - y;      // z는 90이 될 것

직접 시도해보세요

但是该例不会如上例般运行:

var x = "100";
var y = "10";
var z = x + y;       // z는 110가 아니라 10010이 될 것

직접 시도해보세요

在最后一个例子中,JavaScript 用 + 运算符对字符串进行了级联。

NaN - 비数值

NaN 属于 JavaScript 保留词,指示某个数不是合法数。

尝试用一个非数字字符串进行除法会得到 NaN(Not a Number):

예제

var x = 100 / "Apple";  // x는 NaN(Not a Number)이 될 것

직접 시도해보세요

不过,假如字符串包含数值,则结果将是数:

예제

var x = 100 / "10";     // x는 10이 될 것

직접 시도해보세요

您可使用全局 JavaScript 函数 isNaN() 来确定某个值是否是数:

예제

var x = 100 / "Apple";
isNaN(x);               // 반환 true, 왜냐하면 x는 숫자가 아닌 까지

직접 시도해보세요

주의해야 합니다. NaN입니다. 수학 연산에서 NaN이렇게 되면 결과도 NaN

예제

var x = NaN;
var y = 5;
var z = x + y;         // z는 NaN이 됩니다.

직접 시도해보세요

결과는 문자열 연결될 수 있습니다:

예제

var x = NaN;
var y = "5";
var z = x + y;         // z는 NaN5가 됩니다.

직접 시도해보세요

NaN 는 숫자입니다typeof NaN 반환 number

예제

typeof NaN;             // "number"을 반환

직접 시도해보세요

Infinity

Infinity (또는 -Infinity)는 JavaScript가 숫자 계산 중 최대 가능한 수 범위를 벗어났을 때 반환하는 값입니다。

예제

var myNumber = 2;
while (myNumber != Infinity) {          // Infinity까지 실행
    myNumber = myNumber * myNumber;
}

직접 시도해보세요

0으로 나누면 Infinity

예제

var x =  2 / 0;          // x는 Infinity가 됩니다.
var y = -2 / 0;          // y는 -Infinity가 됩니다.

직접 시도해보세요

Infinity 는 숫자입니다:typeOf Infinity 반환 number

예제

typeof Infinity;        // "number"을 반환

직접 시도해보세요

십육진수

JavaScript는 접두사 0x 의 숫자 상수를 십육진수로 해석합니다.

예제

var x = 0xFF;             // x는 255이 됩니다.

직접 시도해보세요

앞자리 0을 사용하여 숫자를 쓰지 마십시오 (예: 07).

일부 JavaScript 버전은 앞자리 0을 가진 숫자를 8진수로 해석합니다.

기본적으로 Javascript는 숫자를 십진수로 표시합니다.

하지만 다음과 같이 사용할 수 있습니다 toString() 메서드는 숫자를 십육진수, 여덟진수 또는 이진수로 출력합니다.

예제

var myNumber = 128;
myNumber.toString(16);     // 80을 반환
myNumber.toString(8);      // 200을 반환
myNumber.toString(2);      // 10000000을 반환

직접 시도해보세요

숫자는 객체일 수 있습니다

일반적으로 JavaScript 숫자는 레이아웃된 원시 값으로 생성됩니다: var x = 123

하지만 키워드를 사용하여도 됩니다. new 객체로 정의됩니다: var y = new Number(123)

예제

var x = 123;
var y = new Number(123);
// typeof x 가 number를 반환합니다
// typeof y 가 object를 반환합니다

직접 시도해보세요

숫자 객체를 생성하지 마세요. 이렇게 하면 실행 속도가 느려집니다.

new 키워드는 코드를 복잡하게 하고, 예상치 못한 결과를 유발할 수 있습니다:

사용할 때 == 같음 연산자를 사용할 때, 같은 수는 같이 보입니다:

예제

var x = 500;             
var y = new Number(500);
// (x == y) 가 true 이유는 x와 y가 같은 값을 가지고 있기 때문입니다

직접 시도해보세요

사용할 때 ===== 같음 연산자 후에, 같은 수가 다르게 보이게 됩니다. 이유는: ===== 연산자는 타입과 값이 모두 일치해야 합니다.

예제

var x = 500;             
var y = new Number(500);
// (x === y) 가 false 이유는 x와 y의 타입이 다르기 때문입니다

직접 시도해보세요

심지어 더 나쁜 경우. 객체는 비교할 수 없습니다:

예제

var x = new Number(500);             
var y = new Number(500);
// (x == y) 가 false 이유는 객체가 비교할 수 없기 때문입니다

직접 시도해보세요

JavaScript 객체는 비교할 수 없습니다.