JavaScript原生对象之Number对象的属性和方法详解


Posted in Javascript onMarch 13, 2015

创建 Number 对象的语法:

var myNum = new Number(value);

var myNum = Number(value);

当 Number() 和运算符 new 一起作为构造函数使用时,它返回一个新创建的 Number 对象。如果不用 new 运算符,把 Number() 作为一个函数来调用,它将把自己的参数转换成一个原始的数值,并且返回这个值(如果转换失败,则返回 NaN)。

MAX_VALUE

MAX_VALUE 属性是 JavaScript 中可表示的最大的数。它的近似值为 1.7976931348623157 x 10308。最大的负数是 -MAX_VALUE。

比MAX_VALUE还要大的数是Infinity。MAX_VALUE是一个静态属性,所以调用方法应该是Number.MAX_VALUE。

console.log(Number.MAX_VALUE)  //1.7976931348623157e+308

MIN_VALUE

MIN_VALUE 属性是 JavaScript 中可表示的最小的数(接近 0 ,但不是负数)。它的近似值为 5 x 10-324

所有比MIN_VALUE小的数都会被转换成0。

MIN_VALUE是一个静态属性,所以调用方法应该是 Number.MIN_VALUE。

NaN

NaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。可以把 Number 对象设置为该值,来指示其不是数字值。

可以使用 isNaN() 全局函数来判断一个值是否是 NaN 值。

Number.NaN 是一个特殊值,说明某些算术运算(如求负数的平方根)的结果不是数字。方法 parseInt() 和 parseFloat() 在不能解析指定的字符串时就返回这个值。对于一些常规情况下返回有效数字的函数,也可以采用这种方法,用 Number.NaN 说明它的错误情况。

JavaScript 以 NaN 的形式输出 Number.NaN。请注意,NaN 与其他数值进行比较的结果总是不相等的,包括它自身在内。因此,不能与 Number.NaN 比较来检测一个值是不是数字,而只能调用 isNaN() 来比较。

注意:全局变量NaN 和Number.NaN 是一样的,NaN是一个不可配置,不可修改的属性。

console.log(parseInt("abc"));    //NaN

console.log(NaN === NaN);        //false

console.log(Number.NaN === NaN); //false

console.log(isNaN(NaN));         //true

console.log(isNaN(Number.NaN));  //true

NEGATIVE_INFINITY

NEGATIVE_INFINITY 属性表示小于 -Number.MAX_VALUE 的值。该值代表负无穷大。

JavaScript 显示 NEGATIVE_INFINITY 时使用的是 -Infinity。这个值的算术行为和无穷大非常相似。例如,任何数乘无穷大结果仍为无穷大,任何数被无穷大除的结果为 0。

-Infinity 和 Number.NEGATIVE_INFINITY 相等。

var x = (-Number.MAX_VALUE) * 2;

var y = Number.NEGATIVE_INFINITY;

console.log(x);     //-Infinity

console.log(y);     //-Infinity

console.log(x===y); //true

POSITIVE_INFINITY

POSITIVE_INFINITY 属性表示大于 Number.MAX_VALUE 的值。该值代表正无穷大。

JavaScript 显示 POSITIVE_INFINITY 时使用的是 Infinity。这个值的算术行为和无穷大非常相似。例如,任何数乘无穷大结果仍为无穷大,任何数被无穷大除的结果为 0。

Infinity 和 Number.POSITIVE_INFINITY相等。

isFinite() 方法可以判断参数是否是有限的数字。

var x = Number.NEGATIVE_INFINITY;

var y = Number.POSITIVE_INFINITY;

var z = Infinity;

var a = "abc";

var b = 123;
console.log(isFinite(x));  //false

console.log(isFinite(y));  //false

console.log(isFinite(z));  //false

console.log(isFinite(a));  //false

console.log(isFinite(b));  //true

toString()

toString() 方法可把一个 Number 对象转换为一个字符串,并返回结果。

NumberObject.toString(radix)

参数radix是可选的。规定表示数字的基数,使 2 ~ 36 之间的整数。若省略该参数,则使用基数 10,建议总是带着此参数,防止误解。例如,当 radix 为 2 时,NumberObject 会被转换为二进制值表示的字符串。

当调用该方法的对象不是 Number 时抛出 TypeError 异常。

var a = 100;
console.log(a.toString());    //100

console.log(a.toString(10));  //100

console.log(a.toString(2));   //1100100

console.log(a.toString(8));   //144

console.log(a.toString(16));  //64

toLocaleString()

toLocaleString() 方法可把一个 Number 对象转换为本地格式的字符串。

数字的字符串表示,由实现决定,根据本地规范进行格式化,可能影响到小数点或千分位分隔符采用的标点符号。

当调用该方法的对象不是 Number 时抛出 TypeError 异常。

var a = 123456;
console.log(a.toLocaleString());  //123,456

console.log(a.toLocaleString("zh-Hans-CN-u-nu-hanidec"));  //一二三,四五六

更多参数可以参考:MDN

toFixed()

toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。

NumberObject.toFixed(num)

参数num是必需的。规定小数的位数,是 0 ~ 20 之间的值,包括 0 和 20,有些实现可以支持更大的数值范围。如果省略了该参数,将用 0 代替。

返回 NumberObject 的字符串表示,不采用指数计数法,小数点后有固定的 num 位数字。如果必要,该数字会被舍入,也可以用 0 补足,以便它达到指定的长度。如果 num 大于 le+21,则该方法只调用 NumberObject.toString(),返回采用指数计数法表示的字符串。

当 num 太小或太大时抛出异常 RangeError。0 ~ 20 之间的值不会引发该异常。有些实现支持更大范围或更小范围内的值。当调用该方法的对象不是 Number 时抛出 TypeError 异常。

var n = 12345.6789;
console.log(n.toFixed());            //12346

console.log(n.toFixed(2));           //12345.68

console.log(n.toFixed(6));           //12345.678900

console.log((1.23e+20).toFixed(2));  //123000000000000000000.00

console.log((1.23e-10).toFixed(2));  //0.00

注意:由于对浮点数的处理,toFixed() 方法展现出的结果并不是所谓的“四舍五入”或者是“四舍六入五成双”,而是四舍,六入,五的表现十分混乱。

//Chrome中

console.log(( 0.035 ).toFixed( 2 )); //0.04

console.log(( 0.045 ).toFixed( 2 )); //0.04

建议自己写方法来替换toFixed()默认行为,可以参考:SO上的讨论:

Number.prototype.toFixed = function(len){

    var temp = Math.pow(10,len);

    var s = Math.ceil(this * temp)

    return s/temp;

}
console.log(( 0.035 ).toFixed( 2 ));  //0.04

console.log(( 0.045 ).toFixed( 2 ));  //0.05

toExponential()

toExponential() 方法可把对象的值转换成指数计数法。

NumberObject.toExponential(num)

参数num是可选的。规定指数计数法中的小数位数,是 0 ~ 20 之间的值,包括 0 和 20,有些实现可以支持更大的数值范围。如果省略了该参数,将使用尽可能多的数字。

返回 NumberObject 的字符串表示,采用指数计数法,即小数点之前有一位数字,小数点之后有 num 位数字。该数字的小数部分将被舍入,必要时用 0 补足,以便它达到指定的长度。

当 num 太小或太大时抛出异常 RangeError。0 ~ 20 之间的值不会引发该异常。有些实现支持更大范围或更小范围内的值。当调用该方法的对象不是 Number 时抛出 TypeError 异常。

var num = 10000.1234;
console.log(num.toExponential());    //1.00001234e+4

console.log(num.toExponential(2));   //1.00e+4

console.log(num.toExponential(10));  //1.0000123400e+4

toPrecision()

toPrecision() 方法可将数值格式化为一个十进制数形式的字符串。

NumberObject.toPrecision(num)

参数num是可选的。用于控制数字的精度。该参数是 1 ~ 21 之间(且包括 1 和 21)的值。如果省略了该参数,则调用方法 toString(),而不是把数字转换成十进制的值。

var num = 10000.1234;
console.log(num.toPrecision());    //10000.1234

console.log(num.toPrecision(2));   //1.0e+4

console.log(num.toPrecision(10));  //10000.12340
Javascript 相关文章推荐
javascript基本语法分析说明
Jun 15 Javascript
JavaScript 浮点数运算 精度问题
Oct 06 Javascript
jQuery 全选 全不选 事件绑定的实现代码
Jan 23 Javascript
Js apply方法详解
Feb 16 Javascript
JavaScript正则表达式校验与递归函数实际应用实例解析
Aug 04 Javascript
React复制到剪贴板的示例代码
Aug 22 Javascript
基于Bootstrap框架菜鸟入门教程(推荐)
Sep 17 Javascript
微信小程序tabBar用法实例详解
Dec 04 Javascript
element-ui循环显示radio控件信息的方法
Aug 24 Javascript
Vue项目中使用jquery的简单方法
May 16 jQuery
关于vue组件事件属性穿透详解
Oct 28 Javascript
Vue中ref和$refs的介绍以及使用方法示例
Jan 11 Vue.js
JavaScript原生对象之Date对象的属性和方法详解
Mar 13 #Javascript
innerHTML属性,outerHTML属性,textContent属性,innerText属性区别详解
Mar 13 #Javascript
JavaScript内存管理介绍
Mar 13 #Javascript
JavaScript中的this关键字使用方法总结
Mar 13 #Javascript
javascript中slice(),splice(),split(),substring(),substr()使用方法
Mar 13 #Javascript
在linux中使用包管理器安装node.js
Mar 13 #Javascript
JQuery中serialize() 序列化
Mar 13 #Javascript
You might like
php daodb插入、更新与删除数据
2009/03/19 PHP
10款PHP开源商城系统汇总介绍
2015/07/23 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
2015/08/27 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
2019/08/05 PHP
自动更新作用
2006/10/08 Javascript
js 鼠标点击事件及其它捕获
2009/06/04 Javascript
JavaScript 语法集锦 脚本之家基础推荐
2009/11/15 Javascript
异步动态加载js与css文件的js代码
2013/09/15 Javascript
javascript中数组的concat()方法使用介绍
2013/12/18 Javascript
javascript中为某个元素指定事件的三种方式
2014/08/07 Javascript
Angular.js与node.js项目里用cookie校验账户登录详解
2017/02/22 Javascript
form表单数据封装成json格式并提交给服务器的实现方法
2017/12/14 Javascript
vue项目中公用footer组件底部位置的适配问题
2018/05/10 Javascript
JavaScript实现Tab选项卡切换
2020/02/13 Javascript
浅谈Vue3.0新版API之composition-api入坑指南
2020/04/30 Javascript
vue中echarts引入中国地图的案例
2020/07/28 Javascript
[01:02:48]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Liquid
2018/04/03 DOTA
[11:12]2018DOTA2国际邀请赛寻真——绿色长城OpTic
2018/08/10 DOTA
python控制台英汉汉英电子词典
2020/04/23 Python
关于你不想知道的所有Python3 unicode特性
2014/11/28 Python
用Python创建声明性迷你语言的教程
2015/04/13 Python
Python制作数据导入导出工具
2015/07/31 Python
Python字符编码判断方法分析
2016/07/01 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
2018/11/06 Python
python树莓派红外反射传感器
2019/01/21 Python
基于python历史天气采集的分析
2019/02/14 Python
Django框架登录加上验证码校验实现验证功能示例
2019/05/23 Python
Python datetime包函数简单介绍
2019/08/28 Python
Django限制API访问频率常用方法解析
2020/10/12 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
2020/11/26 Python
CSS3 rgb and rgba(透明色)的使用详解
2020/09/25 HTML / CSS
林清轩官方网站:山茶花润肤油开创者
2016/10/26 全球购物
英语专业毕业生自我鉴定
2013/11/09 职场文书
公安民警正风肃纪剖析材料
2014/10/10 职场文书
结婚保证书
2015/01/16 职场文书
PyTorch 实现L2正则化以及Dropout的操作
2021/05/27 Python