编辑这个页面须要登录或更高权限!

JavaScript 数值(Number)

JavaScript只有一种数字类型,没有整数和浮点数的单独指定。

因此,数字可以用JavaScript编写,带或不带小数。

var a = 25; // 无小数点
var b = 80.05;  // 有小数点
测试看看‹/›

在以上两种情况下,数据类型都是一个数字,并且无论该数字是否带有小数点都相同。

可以在JavaScript中使用科学的指数表示法来缩写非常大或很小的数字,如以下示例所示:

let num1 = 957e8; // 95700000000
let num2 = 957e-8;// 0.00000957
测试看看‹/›

JavaScript中的数字被认为是准确的,最多15位数字。这意味着数字将在到达第16位后四舍五入:

let num1 = 999999999999999; // 值保持不变 999999999999999
let num2 = 9999999999999999;// 向上舍入到 10000000000000000
测试看看‹/›

数字的内部表示

与其他语言不同,JavaScript不会定义不同类型的数字,例如整数,短整数,长整数,浮点数等。

JavaScript数字具有64位精度,这也称为双精度。

内部表示基于IEEE 754标准。

64位在数字的符号,指数和小数之间分配,如下所示:

标识指数分数
1 bit11 bit52 bit
Bit 63Bits 62–52Bits 51–0

数字相加和字符串拼接

从前面的章节中可以知道,+运算符用于数字相加和字符串拼接。

如果为数字则数字相加。为字符串则将字符串串联起来。

如果将两个数字相加,则结果将是一个数字:

let x = 50;
let y = 10;
let z = x + y;  // z  = 60 (a number)
测试看看‹/›

如果是两个字符串,结果将是字符串串联:

let x = "50";
let y = "10";
let z = x + y;  // z  = 5010 (a string)
测试看看‹/›

如果数字和字符串,结果将是字符串串联:

let x = 50;
let y = "10";
let z = x + y;  // z  = 5010 (a string)
测试看看‹/›

如果字符串和数字,结果将是字符串串联:

let x = "50";
let y = 10;
let z = x + y;  // z  = 5010 (a string)
测试看看‹/›

JavaScript从左到右计算表达式。不同的序列可以产生不同的结果。

在下面的示例中,首先将50 + 10相加,因为x和y都是数字,然后将60 +“30”连接起来,因为z是字符串:

let x = 50;
let y = 10;
let z = "30";
let sum = x + y + z;  // sum  = 6030 (a string)
测试看看‹/›

一个常见的错误,预期此结果为60:

let x = 50;
let y = 10;
let z = "The sum is: " + x + y;
测试看看‹/›

您可以使用括号解决以上问题:

let x = 50;
let y = 10;
let z = "The sum is: " + (x + y);
测试看看‹/›

数字字符串和数学表达式

JavaScript字符串可以包含数字值。

  let x = 50;  // x 是一个数字
  let y = "50";  // y 是一个字符串

如果字符串包含数字值,则可以在JavaScript中执行数学表达式。

可以执行除法:

let x = "50" / "10";  // x  = 5
测试看看‹/›

可以执行乘法:

let x = "50" * "10";  // x  = 500
测试看看‹/›

可以执行幂运算:

let x = "5" ** "3";  // x  = 125
测试看看‹/›

可以执行增量:

let x = "50";
x++; // x  = 51
测试看看‹/›

可以执行减法:

let x = "50" - "10";  // x  = 40
测试看看‹/›

无法执行加法:

let x = "50" + "10";  // x  = 5010
测试看看‹/›

注意:如果添加两个字符串,结果将是字符串串联。

JavaScript NaN-非法数字

在JavaScript NaN中,保留字表示数字不是合法数字。

如果您尝试对数字和非数字值执行数学运算,NaN将返回。

var x = 50 / "(cainiaojc.com)";  // x  = NaN (Not a Number)
测试看看‹/›

但是,如果字符串包含数字值,则可以使用JavaScript执行数学表达式:

var x = 50 / "10";  // x  = 5
测试看看‹/›

您可以使用全局JavaScript isNaN()函数来确定值是否为数字:

var x = 50 / "(cainiaojc.com)";
isNaN(x);// 返回true,因为x不是一个数字
测试看看‹/›

将值分配给NaN操作中使用的变量NaN时,即使另一个操作数是合法数字,也将导致的值:

var x = NaN;
var y = 27;
var z = x + y;  // z  = NaN
测试看看‹/›

NaN是一个数字;typeof NaN返回number:

typeof NaN;   // will return "number"
测试看看‹/›

JavaScript 无穷

Infinity(正无穷)或-Infinity(负无穷)如果您计算的数字超出JavaScript中可用的最大数字,则将返回。

对于未定义的值,也将发生这些情况,例如除以零时:

var x = 5 / 0;   // 将返回无穷
var y = -5 / 0;  // 将返回负无穷
测试看看‹/›

用技术术语来说,Infinity(正无穷)当数字超过number时将显示1.797693134862315E+308,它表示JavaScript中的上限。

同样,-Infinity(负无穷)当数字超出的下限时将显示-1.797693134862316E+308。

Infinity是一个数字:typeof Infinity返回number:

typeof Infinity;   // will return "number"
测试看看‹/›

该数字Infinity也可以在循环中使用:

var num = 5;
while (num != Infinity) { 
// 这里的代码将执行到num = ∞
}
测试看看‹/›

JavaScript 基数

默认情况下,JavaScript将数字显示为以10基数的小数。

数字也可以用十六进制(基数16),二进制(基数2)和八进制(基数8)表示。

十六进制数字的前缀为0x:

var x = 0xFF;  // x  = 255
测试看看‹/›

二进制数字的前缀为0b:

var x = 0b1111;// x  = 15
测试看看‹/›

切勿写一个以零开头的数字(例如0121)。如果将数字写成前导零,则JavaScript会将数字解释为八进制:

var x = 016;
测试看看‹/›

您可以使用该toString()方法从2到36的数字返回数字。

十六进制为基数16,十进制为基数10,八进制为基数8,二进制为基数2

var num = 255;
num.toString(10);  // returns 255
num.toString(16);  // returns ff
num.toString(8);   // returns 377
num.toString(2);   // returns 11111111
测试看看‹/›

数字基元和数字对象

通常,JavaScript数字是从文字创建的原始值:

var num = 50;

但是,也可以使用 new关键字将数字定义为对象:

var num = new Number(50);

为了测试两者之间的差异,我们将初始化一个数字基元和一个数字对象。

var num1 = 50;
var num2 = new Number(50);

typeof num1// returns number
typeof num2// returns object
测试看看‹/›

注意:请勿将数字创建为对象。这会降低执行速度,并会产生一些意外的结果。

使用==运算符时,数字等于:

var num1 = 50;
var num2 = new Number(50);

document.write(num1 == num2); // 返回true,因为num1和num2具有相等的值
测试看看‹/›

使用===运算符时,相等的数字不相等,因为===运算符期望值和类型都相等:

var num1 = 50;
var num2 = new Number(50);

document.write(num1 === num2); // 返回false,因为num1和num2具有不同的类型
测试看看‹/›

对象无法比较:

var num1 = new Number(50);
var num2 = new Number(50);

document.write(num1 == num2); // 返回false,因为num1和num2是不同的对象
document.write(num1 === num2); // 返回false,因为num1和num2是不同的对象
测试看看‹/›

注意(==)和(===)之间的区别。比较两个JavaScript对象将始终返回false。

JavaScript菜鸟教程
JavaScript 对象
JavaScript 函数
JS HTML DOM
JS 浏览器BOM
AJAX 菜鸟教程
JavaScript 参考手册