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 位存储符号:

值(aka Fraction/Mantissa) 指数 符号
52 bits(0 - 51) 11 bits (52 - 62) 1 bit (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 的加法和级联(concatenation)都使用 + 运算符。
数字用加法。字符串用级联。
如果您对两个数相加,结果将是一个数
如果对两个字符串相加,结果将是一个字符串的级联
如果您对一个数和一个字符串相加,结果也是字符串级联

var x = 10;
var y = "20";
var z = x + y;           // z 将是 1020(一个字符串)

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

var x = "10";
var y = 20;
var z = x + y;           // z 将是 1020(字符串)

注意: JavaScript 从左向右进行编译。

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


数字字符串

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

var x = 100;        // x 是数字
var y = "100";       // y 是字符串

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

var x = "100";
var y = "10";
var a = x / y;       // a 将是 10
var b = x * y;       // b 将是 1000
var c = x - y;       // c 将是 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 在计算数时超出最大可能数范围时返回的值。

除以 0(零)也会生成 Infinity

var x =  2 / 0;          // x 将是 Infinity
var y = -2 / 0;          // y 将是 -Infinity

⭐⭐⭐ Infinity 是数:typeOf Infinity 返回 number。 ⭐⭐⭐


十六进制

JavaScript 会把前缀为 0x 的数值常量解释为十六进制。

var x = 0xFF;             // x 将是 255

绝不要用前导零写数字(比如 07)。
一些 JavaScript 版本会把带有前导零的数解释为八进制。
默认地,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,因为对象无法比较


数字方法

所有数字方法可用于任意类型的数字(字面量、变量或表达式)

toString()方法, 以字符串返回数值

var x = 123;
x.toString();            // 从变量 x 返回 123
(123).toString();        // 从文本 123 返回 123
(100 + 23).toString();   // 从表达式 100 + 23 返回 123

toExponential() 返回字符串值,它包含已被四舍五入并使用指数计数法的数字

var x = 9.656;
x.toExponential(2);     // 返回 9.66e+0
x.toExponential(4);     // 返回 9.6560e+0
x.toExponential(6);     // 返回 9.656000e+0

该参数是可选的。如果您没有设置它,JavaScript 不会对数字进行舍入。

toFixed() 返回字符串值,它包含了指定位数小数的数字

var x = 9.656;
x.toFixed(0);           // 返回 10
x.toFixed(2);           // 返回 9.66
x.toFixed(4);           // 返回 9.6560
x.toFixed(6);           // 返回 9.656000

toFixed(2) 非常适合处理金钱。

toPrecision() 返回字符串值,它包含了指定长度的数字

var x = 9.656;
x.toPrecision();        // 返回 9.656
x.toPrecision(2);       // 返回 9.7
x.toPrecision(4);       // 返回 9.656
x.toPrecision(6);       // 返回 9.65600

valueOf() 以数值返回数值

var x = 123;
x.valueOf();            // 从变量 x 返回 123
(123).valueOf();        // 从文本 123 返回 123
(100 + 23).valueOf();   // 从表达式 100 + 23 返回 123

在 JavaScript 中,数字可以是原始值(typeof = number)或对象(typeof = object)。
在 JavaScript 内部使用 valueOf() 方法可将 Number 对象转换为原始值。
没有理由在代码中使用它。
所有 JavaScript 数据类型都有 valueOf() 和 toString() 方法。


把变量转换成数值

这三种 JavaScript 方法可用于将变量转换为数字:

  • Number() 方法
  • parseInt() 方法
  • parseFloat() 方法

这些方法并非数字方法,而是全局JavaScript 方法。


全局方法

JavaScript 全局方法可用于所有 JavaScript 数据类型。
这些是在处理数字时最相关的方法:

方法 描述
Number() 返回数字,由其参数转换而来。
parseFloat() 解析其参数并返回浮点数。
parseInt() 解析其参数并返回整数。

Number() 可用于把 JavaScript 变量转换为数值

x = true;
Number(x);        // 返回 1
x = false;     
Number(x);        // 返回 0
x = new Date();
Number(x);        // 返回 1404568027739
x = "10"
Number(x);        // 返回 10
x = "10 20"
Number(x);        // 返回 NaN

如果无法转换数字,则返回 NaN

Number() 还可以把日期转换为数字

Number(new Date("2019-04-15"));    // 返回 1506729600000

上面的 Number() 方法返回 1970 年 1 月 1 日至今的毫秒数。

parseInt() 解析一段字符串并返回数值。允许空格。只返回首个数字

parseInt("10");         // 返回 10
parseInt("10.33");      // 返回 10
parseInt("10 20 30");   // 返回 10
parseInt("10 years");   // 返回 10
parseInt("years 10");   // 返回 NaN

如果无法转换为数值,则返回 NaN (Not a Number)。

parseFloat() 解析一段字符串并返回数值。允许空格。只返回首个数字

parseFloat("10");        // 返回 10
parseFloat("10.33");     // 返回 10.33
parseFloat("10 20 30");  // 返回 10
parseFloat("10 years");  // 返回 10
parseFloat("years 10");  // 返回 NaN

如果无法转换为数值,则返回 NaN (Not a Number)。


数值属性

属性 描述
MAX_VALUE 返回 JavaScript 中可能的最大数。
MIN_VALUE 返回 JavaScript 中可能的最小数。
NEGATIVE_INFINITY 表示负的无穷大(溢出返回)。
NaN 表示非数字值("Not-a-Number")。
POSITIVE_INFINITY 表示无穷大(溢出返回)。

MAX_VALUE 返回 JavaScript 中可能的最大数字

var x = Number.MAX_VALUE;
document.getElementById("demo").innerHTML = x;  //1.7976931348623157e+308

MIN_VALUE 返回 JavaScript 中可能的最小数字。

var x = Number.MIN_VALUE;
document.getElementById("demo").innerHTML = x;  //5e-324

POSITIVE_INFINITY 表示无穷大(溢出返回)

var x = Number.POSITIVE_INFINITY;  //Infinity

溢出时返回 POSITIVE_INFINITY

var x = 1 / 0;  //Infinity

NEGATIVE_INFINITY 表示负的无穷大(溢出返回)

var x = Number.NEGATIVE_INFINITY;  //-Infinity

溢出时返回 NEGATIVE_INFINITY:

var x = -1 / 0;  //-Infinity

NaN - 非数字

var x = Number.NaN;

NaN 属于 JavaScript 保留字,指示数字并非合法的数字。

尝试使用非数字字符串进行算术运算将导致 NaN(非数字)

var x = 100 / "Apple";  // x 将是 NaN (Not a Number)


⭐⭐⭐数字属性不可用于变量⭐⭐⭐
数字属性属于名为 number 的 JavaScript 数字对象包装器。
这些属性只能作为 Number.MAX_VALUE 访问。
使用 myNumber.MAX_VALUE,其中 myNumber 是变量、表达式或值,将返回 undefined

原文地址:https://www.cnblogs.com/leerep/p/12321995.html