作者 | 阮一峰

1、概述

Number对象是数值对应的包装对象,可以作为构造函数使用,也可以作为工具函数使用。

作为构造函数时,它用于生成值为数值的对象。

var n = new Number(1);typeof n // "object"

上面代码中,Number对象作为构造函数使用,返回一个值为1的对象。

作为工具函数时,它可以将任何类型的值转为数值。

Number(true) // 1

上面代码将布尔值true转为数值1Number作为工具函数的用法,详见《数据类型转换》一章。

2、静态属性

Number对象拥有以下一些静态属性(即直接定义在Number对象上的属性,而不是定义在实例上的属性)。

  • Number.POSITIVE_INFINITY:正的无限,指向Infinity

  • Number.NEGATIVE_INFINITY:负的无限,指向-Infinity

  • Number.NaN:表示非数值,指向NaN

  • Number.MIN_VALUE:表示最小的正数(即最接近0的正数,在64位浮点数体系中为5e-324),相应的,最接近0的负数为-Number.MIN_VALUE

  • Number.MAX_SAFE_INTEGER:表示能够精确表示的最大整数,即9007199254740991

  • Number.MIN_SAFE_INTEGER:表示能够精确表示的最小整数,即-9007199254740991

Number.POSITIVE_INFINITY // InfinityNumber.NEGATIVE_INFINITY // -InfinityNumber.NaN // NaNNumber.MAX_VALUE// 1.7976931348623157e+308Number.MAX_VALUE < Infinity// trueNumber.MIN_VALUE// 5e-324Number.MIN_VALUE > 0// trueNumber.MAX_SAFE_INTEGER // 9007199254740991Number.MIN_SAFE_INTEGER // -9007199254740991

3、实例方法

Number对象有4个实例方法,都跟将数值转换成指定格式有关。

3.1、Number.prototype.toString()

Number对象部署了自己的toString方法,用来将一个数值转为字符串形式。

(10).toString() // "10"

toString方法可以接受一个参数,表示输出的进制。如果省略这个参数,默认将数值先转为十进制,再输出字符串;否则,就根据参数指定的进制,将一个数字转化成某个进制的字符串。

(10).toString(2) // "1010"(10).toString(8) // "12"(10).toString(16) // "a"

上面代码中,10一定要放在括号里,这样表明后面的点表示调用对象属性。如果不加括号,这个点会被 JavaScript 引擎解释成小数点,从而报错。

10.toString(2)// SyntaxError: Unexpected token ILLEGAL

只要能够让 JavaScript 引擎不混淆小数点和对象的点运算符,各种写法都能用。除了为10加上括号,还可以在10后面加两个点,JavaScript 会把第一个点理解成小数点(即10.0),把第二个点理解成调用对象属性,从而得到正确结果。

10..toString(2)// "1010"// 其他方法还包括10 .toString(2) // "1010"10.0.toString(2) // "1010"

这实际上意味着,可以直接对一个小数使用toString方法。

10.5.toString() // "10.5"10.5.toString(2) // "1010.1"10.5.toString(8) // "12.4"10.5.toString(16) // "a.8"

通过方括号运算符也可以调用toString方法。

10['toString'](2) // "1010"

toString方法只能将十进制的数,转为其他进制的字符串。如果要将其他进制的数,转回十进制,需要使用parseInt方法。

3.2、Number.prototype.toFixed()

toFixed方法先将一个数转为指定位数的小数,然后返回这个小数对应的字符串。

(10).toFixed(2) // "10.00"10.005.toFixed(2) // "10.01"

上面代码中,1010.005转成2位小数,其中10必须放在括号里,否则后面的点会被处理成小数点。

toFixed方法的参数为小数位数,有效范围为0到20,超出这个范围将抛出 RangeError 错误。

3.3、Number.prototype.toExponential()

toExponential方法用于将一个数转为科学计数法形式。

(10).toExponential()  // "1e+1"(10).toExponential(1) // "1.0e+1"(10).toExponential(2) // "1.00e+1"(1234).toExponential()  // "1.234e+3"(1234).toExponential(1) // "1.2e+3"(1234).toExponential(2) // "1.23e+3"

toExponential方法的参数是小数点后有效数字的位数,范围为0到20,超出这个范围,会抛出一个 RangeError 错误。

3.4、Number.prototype.toPrecision()

toPrecision方法用于将一个数转为指定位数的有效数字。

(12.34).toPrecision(1) // "1e+1"(12.34).toPrecision(2) // "12"(12.34).toPrecision(3) // "12.3"(12.34).toPrecision(4) // "12.34"(12.34).toPrecision(5) // "12.340"

toPrecision方法的参数为有效数字的位数,范围是1到21,超出这个范围会抛出 RangeError 错误。

toPrecision方法用于四舍五入时不太可靠,跟浮点数不是精确储存有关。

(12.35).toPrecision(3) // "12.3"(12.25).toPrecision(3) // "12.3"(12.15).toPrecision(3) // "12.2"(12.45).toPrecision(3) // "12.4"

4、自定义方法

与其他对象一样,Number.prototype对象上面可以自定义方法,被Number的实例继承。

Number.prototype.add = function (x) {return this + x;};8['add'](2) // 10

上面代码为Number对象实例定义了一个add方法。在数值上调用某个方法,数值会自动转为Number的实例对象,所以就可以调用add方法了。由于add方法返回的还是数值,所以可以链式运算。

Number.prototype.subtract = function (x) {return this - x;};(8).add(2).subtract(4)// 6

上面代码在Number对象的实例上部署了subtract方法,它可以与add方法链式调用。

我们还可以部署更复杂的方法。

Number.prototype.iterate = function () {var result = [];for (var i = 0; i <= this; i++) {    result.push(i);  }return result;};(8).iterate()// [0, 1, 2, 3, 4, 5, 6, 7, 8]

上面代码在Number对象的原型上部署了iterate方法,将一个数值自动遍历为一个数组。

注意,数值的自定义方法,只能定义在它的原型对象Number.prototype上面,数值本身是无法自定义属性的。

var n = 1;n.x = 1;n.x // undefined

上面代码中,n是一个原始类型的数值。直接在它上面新增一个属性x,不会报错,但毫无作用,总是返回undefined。这是因为一旦被调用属性,n就自动转为Number的实例对象,调用结束后,该对象自动销毁。所以,下一次调用n的属性时,实际取到的是另一个对象,属性x当然就读不出来。

阮一份老师的图书推荐

本章节完

推荐阅读系列章节

【JavaScript 教程】入门篇-导论

【JavaScript 教程】入门篇-JavaScript 语言的历史

【JavaScript 教程】入门篇-JavaScript 的基本语法

【JavaScript 教程】数据类型-概述

【JavaScript 教程】数据类型-null, undefined 和布尔值

【JavaScript 教程】数据类型-数值

【JavaScript 教程】数据类型-字符串

【JavaScript 教程】数据类型-对象

【JavaScript 教程】数据类型-函数

【JavaScript 教程】数据类型-数组

【JavaScript 教程】运算符—算术运算符

【JavaScript 教程】运算符—比较运算符

【JavaScript 教程】运算符—布尔运算符

【JavaScript 教程】运算符—二进制位运算符

【JavaScript 教程】运算符—其他运算符,运算顺序

【JavaScript 教程】语法专题—数据类型的转换

【JavaScript 教程】语法专题—错误处理机制

【JavaScript 教程】语法专题—编程风格

【JavaScript 教程】语法专题—console 对象与控制台

【JavaScript 教程】标准库—Object 对象

【JavaScript 教程】标准库—属性描述对象

【JavaScript 教程】标准库—Array 对象

【JavaScript 教程】标准库—包装对象

【JavaScript 教程】标准库—Boolean 对象

后端返回number类型数据_【JavaScript 教程】标准库—Number 对象相关推荐

  1. 后端返回number类型数据_Javascript基础教程之数据类型 (数值 Number)

    javascript中想限定一个数的数值,无需限定它是整数还是浮点数型 var num1 = 80 ; var num2 = 55.51; var num3 = -34; var num4 = 9e5 ...

  2. Java后端返回Long类型数据与前端展示不一致(精度丢失)

    问题描述 接口查询数据返回,有一个Long类型字段,postman返回与数据库一致(= 63354019632316416),swagger返回不一致(= 63354019632316420),chr ...

  3. c语言int超出范围字符串,Go返回int64类型字段超出javascript Number范围的解决方法...

    Go返回int64类型字段超出javascript Number范围的解决方法 最近在项目中,一个go服务给前端提供了一个接口,返回json格式数据,其中Int64字段会超出javascript Nu ...

  4. 对象数组参数_【JavaScript 教程】标准库—Array 对象

    作者 | 阮一峰 1.构造函数 Array是 JavaScript 的原生对象,同时也是一个构造函数,可以用它生成新的数组. var arr = new Array(2);arr.length // ...

  5. C++_泛型编程与标准库(七)

    C++_泛型编程与标准库(七) 参考:<侯捷泛化编程与标准库>.VC2019 图中标红部分为自己的笔记理解 1.深度探索vector 笔者觉得在最新的VC2019下不是二倍增长,虽然是几何 ...

  6. C++_泛型编程与标准库(十)——set与map

    C++_泛型编程与标准库(十)--set与map 参考:<侯捷泛化编程与标准库>.GNU9.3.0,vs2019 图中标红部分为自己的笔记理解 SET GNU 9.3.0的set部分代码如 ...

  7. C++_泛型编程与标准库(八)

    C++_泛型编程与标准库(八) 参考:<侯捷泛化编程与标准库>.GNU9.3.0,vs2019 图中标红部分为自己的笔记理解 1.array GNU 2.9的写法 array GNU9.3 ...

  8. C++_泛型编程与标准库(六)

    C++_泛型编程与标准库(六) 图中标红部分为自己的笔记理解 1.iterator几个特定属性 vc2019的链表list迭代器部分代码 // CLASS TEMPLATE _List_iterato ...

  9. C++_泛型编程与标准库(九)——红黑树的使用

    C++_泛型编程与标准库(九)--红黑树的使用 参考:<侯捷泛化编程与标准库>.GNU9.3.0,vs2019 图中标红部分为自己的笔记理解 struct _Rb_tree_node_ba ...

最新文章

  1. 运营谈恋爱,真的太太太太太太会撩了
  2. word文档快速取消图片的链接
  3. html转word并保持格式不变,表格从Word转Excel想保持格式不变?用这两种方法,保你轻松搞定...
  4. 【转】C语言中DEFINE简介及多行宏定义
  5. uni-app 微信小程序使用 web-view 预览PDF
  6. SQL里的SWITCH分支语句
  7. 基于BIND软件实现互联网DNS解析
  8. IE6 Hotfix MS-042将导致其Crash!
  9. Python如何提取docx中的超链接
  10. HDU 5348 MZL's endless loop(DFS去奇数度点+欧拉回路)
  11. 计算机核心期刊排名及投稿信息
  12. Python 模块:XlsxWriter 的使用
  13. autorunner 测试java_AutoRunner|AutoRunner 自动化测试工具 4.2.5 正式版下载_太平洋下载中心...
  14. 处理器流水线长度是否存在理论极限?
  15. Linux性能测试工具之filesystem(三)
  16. 无人机在抢险救灾的优化运用---2017年中国研究生数学建模竞赛A题 (试题+优秀论文)
  17. 【高胜寒碎碎念】为什么有人愿意花两万块钱去参加IT培训学习?
  18. SpringBoot整合RocketMQ
  19. Python借助爬虫Requests+BS4爬取人民教育出版社义务教育下学期课本(二)
  20. 约瑟夫环问题有10(100人或者n个)个人围成一圈,从第一个人开始报数(报1、2、3),只要报3的人就出去, 然后不停的循环报数,直到最后剩下一个人,计算出这个人最开始的位置。

热门文章

  1. SSL协议安全系列:PKI体系中的证书吊销
  2. 「干货」小程序风头正劲,传统商家该如何把握机会抢占红利?
  3. openchain 环境部署
  4. Mybatis + SpringMVC + Maven实现分页查询
  5. android:scaleType=matrix布局文件加载图片时候的显示方式
  6. 12.HTML编辑器(CKEditor、CKFinder集成)
  7. 【Vegas原创】outlook连接exchange需要密码的解决方法
  8. ios 部分string颜色_ios 设置字符串中某段字符的颜色
  9. python自学到精通
  10. 想轻松入门Python编程,这10个经典案例你还不知道嘛?