肉渣教程

JS Number数字

上一节 下一节

概览 - Number类型

先概览一下指代数字的Number类型:

数字类型 Number

不管是整数还是小数,JavaScript中都属于Number类型。其中特别大或者特别小的数字还可以用科学计数的方式来写。

var x = 41.9;    // 小数
var y = 666;     // 整数
var z = 785e5;   // 78500000
var k = 785e-5;  // 0.00785

运行一下


JS中的数字是不分整数型和实数型,都是属于Number类型;而Number类型都是64位浮点型。而JS的精确度,在整数层面的运算是正常的,但是在涉及小数的部分运算上,会没有那么绝对地准,比如var x = 0.2 + 0.4就不会完全等于0.6,而是极其接近0.6的一个实数,正常来说不会有影响的。但要注意这事,特定场景需使用四舍五入。


数字类型 和 字符串类型 相加

整体的规则是:

  • 数字和数字相加是正常加法
  • 字符串和字符串相加是连接字符串
  • 数字和字符串相加,不管顺序,都是数字转成字符串后,进行连接字符串操作
  • 多个数字、字符串相加,则根据上述三条规则,从左到右依次相加,用前两个的和加第三个、得到新的和再加第四个……


案例1:数字加数字

var x = 10;
var y = 80;
var z = x + y;           // z的值会是90(number)

运行一下


案例2:字符串加字符串

var x = "10";
var y = "80";
var z = x + y;           // z的值会是1080(string)

运行一下


案例3:数字加字符串

var x = 10;
var y = "80";
var z = x + y;           // z的值会是1080(string)

运行一下


案例4:字符串加数字

var x = "10";
var y = 80;
var z = x + y;           // z的值会是1080(string)

运行一下

数字字符串的四则运算(加减乘除)

数字构成的字符串的四则运算,除了加法,都会先自动转成数字再进行数字运算。


案例1:数字string的除法

var x = "100";
var y = "10";
var z = x / y;       // z的值会是10

运行一下


案例2:数字string的乘法

var x = "100";
var y = "10";
var z = x * y;       // z的值会是1000

运行一下


案例3:数字string的减法

var x = "100";
var y = "10";
var z = x - y;       // z的值会是90

运行一下


案例4:数字string的加法(例外,等价于连接字符串)

var x = "100";
var y = "10";
var z = x + y;       // z的值会是字符串10010

运行一下

NaN - Not a Number

NaN是JavaScript的保留字,指代当前数字不是合法数字。但是NaN的数据类型依然是Number数字类型。

var x = 100 / "zhuanfou";  // x会等于NaN(非合法数字)

运行一下


通过全局内置函数isNaN()可以判断变量是否等于NaN,只有传入等于NaN的变量,才会返回true。

var x = NaN;
var y = 666;
var z = x + y;   // z会等于NaN
alert( isNaN( x ) );
alert( isNaN( y ) );
alert( isNaN( z ) );

运行一下

Infinity - 超出范围

Infinity(或者 -Infinity)也是JavaScript的保留词,指代当前数字已经超出极限范围Infinity的数据类型也依然是Number数字类型

var n = 2;
while (n != Infinity) {          // 直到超出极限范围而结束
    n = n * n;
}

运行一下


把数字除以0,也会得到Infinity:

var x =  2 / 0;          // x会等于Infinity
var y = -2 / 0;          // y会等于-Infinity

运行一下

数字的进制转换

JS中可使用0x作为开头,以十六进制的方式来定义数字。(但默认情况下,数字类型变量依然会以10进制显示。)

var x = 0xFF;    // x就是十进制的255


默认情况下,数字类型变量会自动转化为10进制,且以10进制的方式显示。如果想转换成2-36进制的数字。可利用toString()方法来搞定。(备注:输出的结果都是字符串String类型)

var n = 255;
n.toString();     // 会返回十进制 255
n.toString(10);   // 会返回十进制 255
n.toString(32);   // 会返回三十二进制 7v
n.toString(16);   // 会返回十六进制 ff
n.toString(8);    // 会返回八进制 377
n.toString(2);    // 会返回二进制 11111111

运行一下


也可以用new Number(具体数字)的方式来创建数字,但是创建出来的对象的类型是Object,而不是Number;极其不推荐这种创建Object类型数字的方式,原因是多元的,除了对资源更加耗费,更重要的是Object对象之间的比较会很鸡肋。总之一言以枪毙之,别用new Number(具体数字)的方式来创建数字,珍爱生命,远离这种方式。


toString方法 - 将数字转为字符串

上方已经介绍过了用toString()方法来进行进制转换。而toString()方法真正最常用的场景则是将数字类型对象转换成字符串类型对象。

var x = 666;
x.toString();    // 会返回字符串666

var y = 6.66;
y.toString();    // 会返回字符串6.66

运行一下

toExponential()方法 - 科学计数

toExponential()方法可以将数字四舍五入并以科学计数的形式输出。(返回的结果是string字符串类型;传入该方法的参数是指小数点后的保留位数,不过这个参数是非必选参数,若缺省,则意味着保持数字原有位数)

var x = 9.756;
x.toExponential();      // 返回字符串 9.756e+0
x.toExponential(2);     // 返回字符串 9.76e+0
x.toExponential(4);     // 返回字符串 9.7560e+0
x.toExponential(6);     // 返回字符串 9.756000e+0

运行一下

toFixed()方法 - 保留小数

toFixed()方法返回的数字保留小数点后指定位数的结果,保留的方式是四舍五入,返回的结果是String字符串类型

var x = 9.756;
x.toFixed(0);           // 返回字符串 10
x.toFixed(2);           // 返回字符串 9.76
x.toFixed(4);           // 返回字符串 9.7560
x.toFixed(6);           // 返回字符串 9.756000

运行一下

toPrecision()方法 - 指定数字长度

toPrecision()方法会将数字对象,转换成总位数(小数点前位数+小数点后位数)为指定数值。返回的结果为String字符串类型

var x = 19.756;
x.toPrecision();        // 返回字符串 19.756
x.toPrecision(1);       // 返回字符串 2e+1
x.toPrecision(3);       // 返回字符串 19.7
x.toPrecision(5);       // 返回字符串 19.756
x.toPrecision(7);       // 返回字符串 19.75600

运行一下

Number()方法 - 转成数字

Number()方法是JavaScript内置函数,可以将JavaScript变量转换成数字。闲话不说,看例:

Number(true);          // 返回数字 1
Number(false);         // 返回数字 0
Number("20");          // 返回数字 20
Number("  20");        // 返回数字 20
Number("20  ");        // 返回数字 20
Number(" 20  ");       // 返回数字 20
Number("20.33");       // 返回数字 20.33
Number("20,33");       // 返回数字 NaN
Number("20 33");       // 返回数字 NaN 
Number("Jerk");        // 返回数字 NaN
Number(new Date("2018-12-12"));    // 返回数字 1544572800000

运行一下

parseInt()方法 - 转成整数

parseInt()方法可将字符串转换为整数。该方法也是JavaScript的内置函数,将数字或者字符串传入该方法中,将返回整数部分(不是四舍五入,而是去尾而得到整数)。传入的字符串参数,字符串开头可以有多余的空格,去尾则以遇到非数字的字符为触发点。看例子:

parseInt("20");         // 返回数字 20
parseInt("20.33");      // 返回数字 20
parseInt("   20.33");   // 返回数字 20
parseInt("20 20 30");   // 返回数字 20
parseInt("20 years");   // 返回数字 20
parseInt("20years");    // 返回数字 20
parseInt("years 20");   // 返回数字 NaN 

运行一下

parseFloat()方法 - 转成实数

parseFloat()方法可以将字符串转换成实数。字符串开头可以有多余空格。更多内涵请看例子:

parseFloat("20");         // 返回数字 20
parseFloat("20.33");      // 返回数字 20.33
parseFloat("   20.33");   // 返回数字 20.33
parseFloat("20 20 30");   // 返回数字 20
parseFloat("20 years");   // 返回数字 20
parseFloat("20years");    // 返回数字 20
parseFloat("years 20");   // 返回数字 NaN

运行一下

Number类的属性

属性 描述
MAX_VALUE 返回JavaScript中可达到的最大数字
MIN_VALUE 返回JavaScript中可达到的最小数字
POSITIVE_INFINITY 代表已经超出最大数字范围
NEGATIVE_INFINITY 代表已经超出最小数字范围
NaN 是“Not-a-Number”的缩写,指代非法数字,往往是错误运算得来的


看例:

alert( Number.MAX_VALUE );
alert( Number.MIN_VALUE );
alert( Number.POSITIVE_INFINITY );
alert( Number.NEGATIVE_INFINITY );
alert( Number.NaN );

// 注意,上面那些Number类型的属性,不能用在具体的Number对象上
// 不能用在具体的Number对象上!
// 不能用在具体的Number对象上!
// 不能用在具体的Number对象上!
var x = 6;
alert( x.MAX_VALUE );  // 出错,返回undefined

运行一下


JS Number数字

上一节 下一节