先概览一下指代数字的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是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)也是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()方法真正最常用的场景则是将数字类型对象转换成字符串类型对象。
var x = 666; x.toString(); // 会返回字符串666 var y = 6.66; y.toString(); // 会返回字符串6.66
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()方法返回的数字保留小数点后指定位数的结果,保留的方式是四舍五入,返回的结果是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()方法会将数字对象,转换成总位数(小数点前位数+小数点后位数)为指定数值。返回的结果为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()方法是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()方法可将字符串转换为整数。该方法也是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("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
属性 | 描述 |
---|---|
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