深入理解JS中的Number类型

深入了解 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 = Number("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://www.cnblogs.com/Eric178/p/9123680.html

时间: 2024-11-07 03:41:56

深入理解JS中的Number类型的相关文章

js中的number类型

NaN有两个特点: 1 任何涉及NAN的操作都会返回NaN(这个特点在多步计算中可能有问题) 2NaN与任何值都不相等,包括它本身,例如下面的代码也是返回false alert(NaN == NaN) 针对NaN的这两个特点,ECMAscript定义了isNaN()这个函数,该函数接收一个参数,该参数可以是任意数据类型,而且该参数可以帮我们确定这个参数是否“不是数值”.isNaN() 接收到一个值之后会将这个值转换成数值.而某些不会转换为数值的值都将返回true 数值转换 js中数值转换的函数有

理解JS中的call、apply、bind方法

理解JS中的call.apply.bind方法(*****************************************************************) 在JavaScript中,call.apply和bind是Function对象自带的三个方法,这三个方法的主要作用是改变函数中的this指向. call.apply.bind方法的共同点和区别:apply . call .bind 三者都是用来改变函数的this对象的指向的:apply . call .bind 三者

理解js中的作用域以及初探闭包

前言 对于js中的闭包,无论是老司机还是小白,我想,见得不能再多了,然而有时三言两语却很难说得明白,反正在我初学时是这样的,脑子里虽有概念,但是却道不出个所以然来,在面试中经常会被用来吊自己的胃口,考察基础,虽然网上自己也看过不少相关闭包的文章,帖子,但貌似这玩意,越看越复杂,满满逼格高,生涉难懂的专业词汇常常把自己带到沟里去了,越看越迷糊,其实终归结底,用杨绛先生的一句话就是:"你的问题在于代码写得太少,书读得不够多",其实在我看来前者是主要的,是后者的检验, 自知目标搬砖20年(还

Ext.js 中 25种类型的Ext.panel.Tool

通过Ext.panel.Panel的tools配置项来设置Ext.panel.Tool实例. 要注意的一点是,Ext框架提供的Ext.panel.Tool仅包含按钮图标而具体的点击事件处理函数需要我们自定义. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51

理解JS中的prototype

JS中的phototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是以A为原型的,并且能进行扩展.我们称B的原型为A. 2 javascript的方法可以分为三类: a 类方法 b 对象方法 c 原型方法 例子: function People(name) { this.name=name; //对象方法 this.Introduce=function

JS中基本包装类型说明需求文档

为了便于操作基本类型值,ES还提供了三种特殊的引用类型,即(基本包装类型):Number,String,Boolean.这三种类型与前面介绍的引用类型相似,但同时也拥有基本数据类型的一些特性. 平时经常看到人家代码里创建了一个字符串/数字类型,然后使用字符串/数字类型的一些方法,比如,split().substring()等等,搞得我们误以为基本包装类型拥有的方法.其实,我们这种理解是错误的.实际上,当我们操作基本包装类型数据时,在后台就会悄悄的创建一个对应的基本包装类型的对象.因为是对象呀,所

5.6 JS中基本包装类型

为了便于操作基本类型值,ES还提供了三种特殊的引用类型,即(基本包装类型):Number,String,Boolean.这三种类型与前面介绍的引用类型相似,但同时也拥有基本数据类型的一些特性. 平时经常看到人家代码里创建了一个字符串/数字类型,然后使用字符串/数字类型的一些方法,比如,split().substring()等等,搞得我们误以为这些方法是基本包装类型拥有这些方法.其实,我们这种理解是错误的.实际上,当我们操作基本包装类型数据时,在后台就会悄悄的创建一个对应的基本包装类型的对象.因为

js中对象的类型

js中的类型分为三种,"内部对象"."宿主对象"."自定义对象" 1."内部对象"有Date.Function.Array.Regexp.Number.Object.String.Math.Global.Boolean, 还有各种错误类对象,包括Error.EvalError.RangeError.ReferenceError.SyntaxError和TypeError. "Global"."Ma

js中的变量类型

js 中输出定义变量的类型  typeof  变量名. var u:  --underfined类型 var s = "你是一个好人":   --string类型 var n = 10;   --number类型 var  num = NaN;  --number 类型,not a number. var  n = null:   -- object类型 var d = new Date();   --时间 var a = new Array();   --数组