JavaScript数据类型之数字类型

摘要:
介绍JavaScript不区分整数值和浮点值,所有这些值都由浮点值表示。JavaScript支持多种格式的数字文字。整数直接量在JavaScript程序中,程序序列表示十进制整数。类似地,当负数的值超过JavaScript可以表达的负数范围时,结果是负无穷大,在JavaScript中用无穷大表示。在这种情况下,JavaScript将返回0。当负数下溢时,JavaScript返回一个特殊值“负零”。换句话说,当在JavaScript中使用实数时,它们通常只是实数的近似表示。
引言

JavaScript不区分整数值和浮点数值,全部使用浮点数值表示。当一个数字直接出现在JavaScript程序中,我们称之为数字直接量(numeric litertal)。JavaScript支持多种格式的数字直接量。

整型直接量

在JavaScript程序中,用一个程序序列表示一个十进制整数。除了十进制的整型直接量,JavaScript同样能识别十六进制(以16为基数)值(以“0x”和“0X”为前缀)。

浮点型直接量

浮点型直接量可以含有小数点,它们采用的是传统的实数写法。一个实数由整数部分、小数点和小数部分组成。同时支持指数记数法表示浮点型直接量。

JavaScript中的算术运算

JavaScript程序是使用语言本身提供的算术运算符来进行数字运算的。这些运算符包括加法运算符(+)、减法运算符(-)、乘法运算符(*)、除法运算符(/)和求余(求整除后的余数)运算符(%)。JavaScrip中的算术运算在溢出(overflow)、下溢(underflow)或被零整除时不会报错。

溢出

当数字运算结果超过了JavaScript所能表示的数字上限(溢出),结果为一个特殊的无穷大(infinity)值,在JavaScript中以Infinity表示。同样,当负数的值超过了JavaScript所能表示的负数范围,结果为负无穷大,JavaScript中以-Infinity表示。无穷大值的行为特性和我们所期望的是一致的:基于它们的加、减、乘和除运算结果还是无穷大值(保留其正负号)。

下溢

下溢是当运算结果无限接近于零并比JavaScript能表示的最小值还小的时候发生的一种情形。这种情况下,JavaScript将会返回0。当一个负数发生下溢时,JavaScript返回一个特殊的值“负零”。这个值(负零)几乎和正常的完全一样,但是很少用到。

被零整除

被零整除在JavaScript并不报错:它只是简单的返回无穷大(Infinity)或负无穷大(-Infinity)。但是有一个例外,零除以零是没有意义的,这种整除运算结果也是一个非数字(not-a-number)值,用NaN表示。无穷大除以无穷大、给任意负数作开方运算或者算术运算符与不是数字或无法转换为数字的操作数一起使用时都将会返回NaN。

Infinity和NaN

JavaScript预定义了全局变量Infinity和NaN,用来表示正无穷大和非数字值。在ECMScript3中,这两个值是可读/写的,并可修改。ECMAScript5修正了这个错误,将它们定义为只读的。

特殊情况

  1. JavaScript中的非数字值都有一点特殊:它和任何值都不相等,包括自身。如判断变量x是否是NaN,应当使用x!=x来判断,当且仅当x为NaN的时候,表达式的结果才为true。
  2. 负零值同样有些特殊,它和正零值是相等的。这意味这两个值几乎一模一样的,除了作为除数之外:零被除得到正无穷大,负零被除得到负无穷大。
二进制浮点数和四舍五入错误

实数有无数个,但是JavaScript通过浮点数的形式只能表示其中有限的个数(确切地说是1843 7736 8744 5481 0627个)。也就是说,当在JavaScript中使用实数的时候,常常只是真实值的一个近似表示。

免责声明:文章转载自《JavaScript数据类型之数字类型》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇NameNode和DataNode工作原理剖析[Go] Golang defer 与 MySQL 连接关闭的陷阱 (database is closed)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

百度地图JavaScript开发入门先知

最近项目紧急开发了一些百度地图的功能,觉得百度地图实数强大!于是今天不忙总结一下,看到不错的文章先转载。 文章出处:https://www.opengps.cn/Blog/View.aspx?id=14 百度地图JavaScript开发第一步,得会看资料。很多新手,是因为连基本的页面怎么打开都不知道,重度依赖搜索引擎去搜出来百度地图开发官方站点,从而记不住...

【译】Js基础运行机制

一、js的工作原理:引擎、运行时与调用栈概述 JavaScript引擎的一个流行示例是Google的V8引擎。比如,V8引擎用于Chrome和Node.js。 该引擎包括两个主要组件:*内存堆-这是内存分配的地方*调用堆栈-这是代码执行时堆栈帧的位置 运行时浏览器中有几乎所有JavaScript开发人员都在使用的API(例如“ setTimeout”)。...

Javascript:再论Javascript的单线程机制 之 DOM渲染时机

Javascript:再论Javascript的单线程机制 之 DOM渲染时机 背景 Javascript是单线程事件驱动的,所有能看到的Javascript代码都是在一个线程执行,定时器回调和AJAX回调会在适当的时刻插入队列等待Javascript线程调度执行,今天想测试一下DOM渲染的线程与时机,具体的问题是: 修改DOM会立即显示在UI中吗? 一个...

原生JavaScript判断是否为邮箱、危险字符、验证长度、验证网址、验证小数、整数、浮点数等常用的 js 验证

(71~80)验证篇这一篇文章主要是10个比较常用表单验证功能,包括了邮箱、危险字符、验证长度、验证网址、验证小数、整数、浮点数等常用的验证,有了这些代码片段,平时的表单验证也可以不需要jquery的验证插件了,希望可以帮到大家。。。 71、原生JavaScript判断是否为邮箱 复制代码 代码如下: functionisEmail(str){...

Javascript 文件操作(整理版)

Javascript 文件操作 一、功能实现核心:FileSystemObject 对象 其实,要在Javascript中实现文件操作功能,主要就是依靠FileSystemobject对象。在详细介绍FileSystemobject对象的各个属性和方法的使用细节前,先来看看这个对象包括哪些相关对象和集合: 二、FileSystemObject编程三步 使...

三种Js深度学习框架介绍

谈到机器学习,我们脑海首先蹦出的编程语言是什么?一定是python。其实除了python,JavaScript也是不错的选择。都说现在是大前端时代,从移动开发、服务器端,甚至桌面软件开发(比如大名鼎鼎的VS Code),都有JavaScript的身影。   用Javascript写机器学习应用,当然不会从头开始手写机器学习算法和模型,通常会借助现有框架。我...