深切相识 Number 范例

Number 范例作为 JS 的基础数据范例之一,被应用在顺序中的种种场景,其重要性就如数字关于我们一样平常生涯。
下面就让我们来一同深切了解下,为今后的“策马奔驰”做好铺垫。

定义体式格局

平常来说我们能够直接运用数值字面量花样来定义一个数字,以下:

var num1 = 15;
var num2 = 7;

console.log(typeof num1); // number
console.log(typeof num2); // number

数值范例

定义的数值可分为两种范例,分别为整数和浮点数。

整数

整数,能够经由过程十进制,八进制,十六进制的字面值来示意。(默以为十进值)

// 十进制
var intNum1 = 55; // 正数
var intNum2 = 0; // 0
var intNum3 = -3; // 负数

// 八进制
// 第一位必需是0,其他位的取值局限为0-7
// 无效的八进制会直接疏忽前面的0,剖析为十进制
var octalNum1 = 070; // 八进制的56(7*8 + 0)
var octalNum2 = 079; // 无效的八进制数,9超过了8进制数的局限,剖析为79
var octalNum3 = 08; // 无效的八进制数,直接剖析伪8

// 十六进制
// 前两位必需是0x,其他位的取值局限为 0~9 或 A~F
var hexNum1 = 0xA; // 十六进制的10
var hexNum2 = 0x1f; // 十六进制的31(1*16 + 15)
在举行算数盘算时,一切以八进制和十六进制示意的数值终究都将被转换成十进制的数值。
// 对前面定义的八进制和十六进制数值举行运算
console.log(octalNum1 + hexNum1); // 66
浮点数

浮点数实在就是我们平常所说的小数,所以一定有个小数点。简朴示例以下:

var floatNum1 = 5.2;
var floatNum2 = 3.14;

浮点数所占有的内存空间是整数的两倍。假如小数点后只要零或没有数字,为了节约内存空间,则该小数会被转化为整数,以下:

var floatNum3 = 5.0; // 5
var floatNum4 = 2.; // 2

举行算术运算时,浮点数不如整数精准,所以平常不要运用浮点数举行盘算,以下:

var floatNum4 = 0.1; 
var floatNum5 = 0.2; 

// 0.1 + 0.2 不等于 0.3
console.log(floatNum4 + floatNum5); // 0.30000000000000004

对极大极小的浮点数平常会采纳e示意法,以下:

 var floatNum6 = 3.2e7;// 3.2×10(7次幂)
 var floatNum7 = 3.2e-7;// 3.2×10(-7次幂)

NaN

NaN 是 not a number 的简写,即非数字。它是一个特别的值,这个数值用于示意一个原本要返回数值的操纵数,效果未返回数值的状况。
NaN 有两个不同寻常的特性:

  • 任何触及 NaN 的操纵都邑返回 NaN
  • NaN 值与任何值都不相称,包含自身。

console.log(NaN / 10); // NaN
console.log(NaN == NaN); // false
针对这两个特性,JS 供应了一个 isNaN()函数。该函数接收一个参数(能够是任何范例),而函数会帮我们肯定这个参数是不是“不是数值”。
注:通报的参数会触及数值转换的题目,比方“10”这个字符串就能够转换为 10,然则“blue”这个字符串则没法转换为数字,所以 isNaN(‘blue’) == true

console.log(isNaN(NaN)); // true
console.log(isNaN(10)); // false
console.log(isNaN("10")); // false,能够被转成数值 10
console.log(isNaN("blue")); // true
console.log(isNaN(true)); // false,能够被转成数值 1

数值转换

有三个函数能够把非数值转换为数值:Number(),parseInt(),parseFloat()。第一个能够用于任何数据范例,后两个则特地用于把字符串转化为数值。
简朴示例以下:

// Number()
// 转换规则比较复杂,可细致参考下面的材料
var numN1 = Number("Hello world!");  // NaN
var numN2 = Number(" ");  // 0 空字符串转为0
var numN3 = Numberl("000011");  // 11
var numN4 = Number(true);  // 1

// parseInt
// 疏忽小数点
// 字符串会被转成数值
var numI1 = parseInt(22.5);   // 22
var numI2 = parseInt ("1234blue") ;  // 1234
var numI3 = parseInt (" ") ;   // NaN
var numI4 = parseInt("70");  //70(十进制数)
var numI5 = parseInt ("070") ;  // 56(八进制数)
var numI6 = parseInt ("0xA") ;  // 10(十六进制数)

// parseFloat
// 字符串会被转成数值
// 假如有多个小数点,则只去第一个,其他悉数舍弃
var numF1 = parseFloat ("1234blue") ;  // 1234(整数)
var numF2 = parseFloat("0xA");   // 0
var numF3 = parseFloat("22.5");  // 22.5
var numF4 = parseFloat("22.34.5");  // 22.34
var numF5 = parseFloat("0908.5");   // 908.5
var numF6 = parseFloat("3.125e7");   // 31250000

细致引见可参考:

数值局限

因为内存的限定,JS 并不能保留一切的数值。那末其能示意的最大最小值究竟是多少呢?我们能够运用 Number 对象的 MIN_VALUE 和 MAX_VALUE 属性示意(很少很少用到,也许晓得就能够,真要用的时刻能够再查阅):

  • Number.MIN_VALUE 为能示意的最小正数即最接近 0 的正数 (实际上不会变成 0),它的近似值为 5 x 10-324。
  • Number.MAX_VALUE 为能示意的最大正数,它的近似值为 1.7976931348623157 x 10308

假如一个数值超过了最大能示意数值,则自动变成 Infinity 值(无限数),我们能够运用 Number 对象的 isFinite() 来推断一个数是不是是有限数,假如非有限数则为无限数。

console.log(Number.isFinite(56)); // true
console.log(Number.isFinite(Number.MAX_VALUE + Number.MAX_VALUE)); // false

更多 Number 对象的属性和要领可参考:Number 对象 | MDN

数学函数

回想一想想,我们上学的时刻是不是是学过许多处置惩罚数字的数学公式啊,那在 JS 中该怎么办?
不必慌,JS 中内置了一个 Math 对象,它具有数学常数和函数的属性和要领。
我们先来几个简朴的例子:

// 函数返回一个数字四舍五入后最接近的整数值。
Math.round(3.4); // 3

// 函数返回一个随机浮点数, 局限在[0,1)
Math.random(); // 随机浮点数,每次都不一样

// 函数返回一个数的平方根
Math.sqrt(9); // 3

// 函数返回给定的一组数字中的最大值
Math.max(10, 20, 13, 18);   //  20

//sin 要领返回一个 -1 到 1 之间的数值,示意给定角度(单元:弧度)的正弦值。
// Math.PI 示意圆周率,一个圆的周长和直径之比,约等于 3.14159.
Math.sin(Math.PI / 2); // 1

更多 Math 对象可参考:Math 对象 | MDN

    原文作者:无悔铭
    原文地址: https://segmentfault.com/a/1190000013029838
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞