JavaScript 数据类型——数字 (Number)

在 JavaScript 中,整形 (integer) 和浮点型 (float-point) 数值都是 number 数据类型表示。

var num = 0;
typeof num;  // "number"

num = 3.14;
typeof num;  // "number"

取值范围

number 数据类型采用的是 双精度 64 位浮点格式 (IEEE754)

表示形式

多数情况下,我们的数字都是以十进制的形式表示的,但是,在 JavaScript 中,我们还可以以八进制和十六进制的形式表示数字。

  • 八进制:以 0 开始的数字,var num = 0377; // 255
  • 十六进制:以 0x (0X) 开始的数字,var num = 0xff; // 255
  • 指数字面量:e 或 E,比如:2e32e-3

两种特殊的数字类型

Infinity

Infinity 的意思即无穷,也就是说一个数字的值太大了,以至于 JavaScript 都已经没法处理它了。所以如果数字的范围超过了上面浮点类型表示的最大范围则变为 Infinity

注意事项:

  • Infinty 与 Infinity 之间执行减、除结果为 NaN,加、乘结果为 Infinity。
  • Infinty 与除 Infinity 和 NaN 之外的数字操作结果都为 Infinity。

判断方式:Number.isFinite(value)

NaN

NaN 即 "Not A Number" 的缩写,也就是非数字,虽然名字叫非数字,但它本质上却是数字类型:typeof NaN; // "number"。如果您的数字相关操作失败了,都会得到一个 NaN,比如 1 * 'f'Math.sqrt(-1),等等。同时,NaN 具有传染性,也就是它与任何数据操作的结果都是一个 NaN

判断方式:Number.isNaN(value)

Number 对象

Number 对象在 JavaScript 中并不是一个基元数字数据类型:

var numObj = new Number(1);

typeof numObj;  // "object"
numbObj.valueOf();  // 1

因此,在 JavaScript 中避免使用 Number 对象来表示数字,这给判断数据是否为数字类型带来了困难,其次,要想获取它的值,还需要调用 valueOf 方法,存在诸多不便。

但是我想调用 Number 类型的方法怎么办呢,不用担心,JavaScript 会自动对基元数字类型进行装箱操作,在背后将其转换为 Number 类型:

var num = 3;
num.toString();  // "3"

Number 构造函数属性

属性 描述
Number.MAX_VALUE 一个包含最大允许数字的常量属性(不可更改)。
>>> Number.MAX_VALUE
1.7976931348623157e+308
>>> Number.MAX_VALUE = 101;
Number.MAX_VALUE is read-only
Number.MIN_VALUE 您能使用的最小的数字,同上,也无法更改。
>>> Number.MIN_VALUE
5e-324
Number.NaN 包含了 NaN 数字。
>>> Number.NaN
NaN
NaN 与任何数据都不相等,包括其自身。
>>> Number.NaN === NaN
false
Number.NaN 相对于更方便使用的 NaN 更加可靠,因为后者存在被重写的风险。
>>> NaN = 1; // 不要这么做!
1
>>> NaN
1
>>> Number.NaN
NaN
Number.POSITIVE_INFINITY 包含了 Infinity 数字。它比全局的 Infinity 值更可靠(global 对象的属性),因为它是只读的。
Number.NEGATIVE_INFINITY 包含了 -Infinity 数字。其余同上。

Number 对象方法

方法 描述
toFixed(fractionDigits) 将一个数字对象定点表示为一个字符串。剩余的数字四舍五入。
>>> var n = new Number(Math.PI);
>>> n.valueOf();
3.141592653589793
>>> n.toFixed(3)
"3.142"
toExponential(fractionDigits) 将一个数字对象以指数记号法的形式表示为一个字符串。剩余的数字四舍五入。
>>> var n = new Number(56789);
>>> n.toExponential(2)
"5.68e+4"
toPrecision(precision) 一个数字对象的字符串表示形式,指数或定点表示形式,这取决于数字对象本身。
>>> var n = new Number(56789);
>>> n.toPrecision(2)
"5.7e+4"
>>> n.toPrecision(5)
"56789"
>>> n.toPrecision(4)
"5.679e+4"
>>> var n = new Number(Math.PI);
>>> n.toPrecision(4)
"3.142"

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,115评论 0 13
  • 官方中文版原文链接 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大...
    HetfieldJoe阅读 1,322评论 0 15
  • 整数和浮点数 规则在JavaScript语言的底层,根本没有整数,所有数字都是小数(64位浮点数)JavaScri...
    素弥阅读 1,063评论 0 0
  • 特别说明,为便于查阅,文章转自https://github.com/getify/You-Dont-Know-JS...
    杀破狼real阅读 192评论 0 0
  • 变量 声明变量 命名变量区分大小写的语言第一个字符是字母或下划线_,数字不能作为第一个字符字符必须是字母,数字或者...
    flyingtoparis阅读 794评论 0 0