搜索
首页web前端前端问答javascript数值型有几种
javascript数值型有几种Sep 23, 2022 pm 05:15 PM
javascript

javascript数值型只有一种:浮点类型。JavaScript内部存储数字都是按64位浮点类型存储的,所以在JavaScript中实际上是没有整数类型的。按照JavaScript中的数字格式能够表示的整数范围为“[-2^53 ~ 2^53]”,包含边界值;但需要注意的是,数组索引、位操作符等使用的是基于32位的整数。

javascript数值型有几种

本教程操作环境:windows7系统、javascript1.8.5版、Dell G3电脑。

在JavaScript中,数值类型只有一种,内部表示为64位浮点数。所以在JavaScript中实际上是没有整数类型的。

print(3/2); // 1.5

可见,数值都是按浮点数来处理的。

因为JavaScript内部存储数字都是按64位浮点类型存储的,无论整数和小数。容易造成混淆的是,某些位运算必须要整数才可以运行,所以会自动将64位浮点数转化为32位整数。再进行位运算。在JavaScript中,1和1.0是一样的

1 == 1.0 true
0.1+0.2 == 0.3 false
0.3/0.1 = 2.99999999996
(0.3-0.2) === (0.2-0.1) false

总之,涉及小数的运算要小心

按照JavaScript中的数字格式(IEEE-754定义的64位浮点格式),能够表示的整数范围为[-2^53 ~ 2^53],包含边界值。然而需要注意的是,数组索引、位操作符等使用的是基于32位的整数。

浮点数值的最高精度是17位小数,但在进行算术计算时其精确度远远不如整数。例如,0.1加0.2的结果不是0.3,而是0.30000000000000004。这个小小的舍入误差会导致无法测试特定的浮点数值。

因为二进制浮点数可以精确地表示1/2、1/8等,但不能精确地表示1/10、1/100等。所以像0.1这样的简单数字也不能精确表示。

由于浮点数有精度问题,可能会在比较时得到一此意想不到的结果:

print((0.1+0.2) == 0.3); // false
print(0.1+0.2);          // 0.30000000000000004
print(0.3);              // 0.3

print((10/3-3) == (1/3));// false
print(10/3-3);           // 0.3333333333333335
print(1/3);              // 0.3333333333333333

对于整数的情况,只要使用53位以内的整数,则不会出现精度问题,可以放心使用。

除了以十进制表示外,整数还可以通过八进制(以8为基数)或十六进制(以16为基数)的字面值来表示。其中,八进制字面值的第一位必须是零(0),然后是八进制数字序列(0~7)。如果字面值中的数值超出了范围,那么前导零将被忽略,后面的数值将被当作十进制数值解析。

八进制字面量在严格模式下是无效的,会导致支持该模式的JavaScript引擎抛出错误。 

十六进制字面值的前两位必须是0x,后跟任何十六进制数字(0~9及A~F)。其中,字母 A~F 可以大写,也可以小写。

由于保存浮点数值需要的内存空间是保存整数值的两倍,因此ECMAScript会不失时机地将浮点数值转换为整数值。显然,如果小数点后面没有跟任何数字,那么这个数值就可以作为整数值来保存。同样地,如果浮点数值本身表示的就是一个整数(如1.0),那么该值也会被转换为整数。

数值对象

与字符串值对应着一个字符串对象一样,数值也有对应的数值对象,即Number。

数值同样可以直接调用数值对应的属性:

print((6).toString()); // 6

注意,本例中,数值需要添加括号,否则句点会被认为是小数点。

Number的使用与String的使用类似,可以进行类型转换、创建数值对象等。

在进行类型转换时,如果转换不成功,即Number返回NaN,使用数值对象时也是如此。

var a = Number('x');
print(typeof a, a);       // number NaN
var b = new Number('x'); 
print(typeof b, b);       // object [Number: NaN]

Number具有5个特殊属性(只读),即:

  • MAX_VALUE         :正数最大值,再大就会变成Infinity

  • MIN_VALUE         :正数最小值,再小就会变成0

  • NaN               :Not a Number

  • NEGATIVE_INFINITY :负无穷大,即-Infinity

  • POSITIVE_INFINITY :正无穷大,即Infinity

print(Number.MAX_VALUE);         // 1.7976931348623157e+308
print(Number.MIN_VALUE);         // 5e-324
print(Number.NaN);               // NaN
print(Number.NEGATIVE_INFINITY); // -Infinity
print(Number.POSITIVE_INFINITY); // Infinity

Infinity

当数字运算结果超过了JavaScript所能表示数字上限时,结果为一个特殊的无穷大值(Infinity),如果是负数的值超过了JavaScript所能表示的负数范围,则结果为-Infinity。

当运算结果无限接近于零并比JavaScript能表示的最小值还小的时候(下溢),结果为0,当负数发生下溢时,结果为-0,正数发生下溢,则结果为 0。

JavaScript预定义了全局变量Infinity和NaN,它们都是只读变量。

由于内存的限制,ECMAScript并不能保存世界上所有的数值。ECMAScript能够表示的最小数值保存在Number.MIN_VALUE中——在大多数浏览器中,这个值是5e-324;能够表示的最大数值保存在Number.MAX_VALUE中——在大多数浏览器中,这个值是1.7976931348623157e+308。如果某次计算的结果得到了一个超出JavaScript数值范围的值,那么这个数值将被自动转换成特殊的Infinity值。具体来说,如果这个数值是负数,则会被转换成-Infinity(负无穷),如果这个数值是正数,则会被转换成Infinity(正无穷)。 

如果某次计算返回了正或负的Infinity值,那么该值将无法继续参与下一次的计算,因为Infinity不是能够参与计算的数值。要想确定一个数值是不是有穷的(换句话说,是不是位于最小和最大的数值之间),可以使用isFinite()函数。

NaN

NaN是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。

对于NaN,要记住的一点是,只要运算中出现NaN,结果就一定是NaN,就算是"NaN*0"这样的运算,也一样是NaN。只要对NaN运行比较运行,结果就一定是false,就算"NaN==NaN"/"NaN!=NaN"等,都是false。

要判断一个值是否为NaN,可以使用isNaN()函数:

print(isNaN(NaN));  // true
print(isNaN(0/0));  // true

在基于对象调用isNaN()函数时,会首先调用对象的valueOf()方法,然后确定该方法返回的值是否可以转换为数值。如果不能,则基于这个返回值再调用toString()方法,再测试返回值。

也可以使用x!==x来判断x是否为NaN,只有在x为NaN的时候,这个表达式的值才为true。

inFinite()

isFinite函数用于判断一个数是否为“正常”的数值:

print(isFinite(Number.NaN));               // false
print(isFinite(Number.NEGATIVE_INFINITY)); // false
print(isFinite(Number.POSITIVE_INFINITY)); // false

除了以上3个特殊值外,其他值的结果都为true

假如x是一个普通数值,则有:

x/0 = Infinity
x%0 = NaN
x/Infinity = 0
x%Infinity = x
0/0 = NaN
0%0 = NaN
Infinity/x = Infinity
Infinity%x = NaN
Infinity/Infinity = NaN
Infinity%Infinity = NaN

完整输出如下:

print(0 / 0);           // NaN
print(3 / 0);           // Infinity
print(Infinity / 0);    // Infinity
print(0 % 0);           // NaN
print(3 % 0);           // NaN
print(Infinity % 0);    // NaN
----------
print(0 / 4);           // 0
print(3 / 4);           // 0.75
print(Infinity / 4);    // Infinity
print(0 % 4);           // 0
print(3 % 4);           // 3
print(Infinity % 4);    // NaN
----------
print(0 / Infinity);           // 0
print(3 / Infinity);           // 0
print(Infinity / Infinity);    // NaN
print(0 % Infinity);           // 0
print(3 % Infinity);           // 3
print(Infinity % Infinity);    // NaN

负零与正零

负零与正零的值相等,不过毕竟带有符号,在一些运算中会有符号方面的差别,比如:

var zero = 0; 
var negz = -0;

此时,zero 等于 negz , 但1/zero 却不等于 1/negz。

【相关推荐:javascript视频教程编程基础视频

以上是javascript数值型有几种的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
es6数组怎么去掉重复并且重新排序es6数组怎么去掉重复并且重新排序May 05, 2022 pm 07:08 PM

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

JavaScript的Symbol类型、隐藏属性及全局注册表详解JavaScript的Symbol类型、隐藏属性及全局注册表详解Jun 02, 2022 am 11:50 AM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

原来利用纯CSS也能实现文字轮播与图片轮播!原来利用纯CSS也能实现文字轮播与图片轮播!Jun 10, 2022 pm 01:00 PM

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

JavaScript对象的构造函数和new操作符(实例详解)JavaScript对象的构造函数和new操作符(实例详解)May 10, 2022 pm 06:16 PM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

JavaScript面向对象详细解析之属性描述符JavaScript面向对象详细解析之属性描述符May 27, 2022 pm 05:29 PM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

javascript怎么移除元素点击事件javascript怎么移除元素点击事件Apr 11, 2022 pm 04:51 PM

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

整理总结JavaScript常见的BOM操作整理总结JavaScript常见的BOM操作Jun 01, 2022 am 11:43 AM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

foreach是es6里的吗foreach是es6里的吗May 05, 2022 pm 05:59 PM

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器