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 高效运行代码分析
Mar 18 Javascript
JS实现转动随机数抽奖特效代码
Apr 16 Javascript
JS实现可关闭的对联广告效果代码
Sep 14 Javascript
JavaScript隐式类型转换
Mar 15 Javascript
ionic隐藏tabs的方法
Aug 29 Javascript
AngularJS的ng-repeat指令与scope继承关系实例详解
Jan 21 Javascript
JSON与js对象序列化实例详解
Mar 16 Javascript
获取当前按钮或者html的ID名称实例(推荐)
Jun 23 Javascript
vue自定v-model实现表单数据双向绑定问题
Sep 03 Javascript
element-ui 时间选择器限制范围的实现(随动)
Jan 09 Javascript
详解javascript void(0)
Jul 13 Javascript
vuex分模块后,实现获取state的值
Jul 26 Javascript
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 图片上传类代码
2009/07/17 PHP
PHP 文件缓存的性能测试
2010/04/25 PHP
PHP下载远程文件到本地存储的方法
2015/03/24 PHP
php三元运算符知识汇总
2015/07/02 PHP
双冒号 ::在PHP中的使用情况
2015/11/05 PHP
在一个js文件里远程调用jquery.js会在ie8下的一个奇怪问题
2010/11/28 Javascript
javascript判断是手机还是电脑访问网页的简单实例分享
2014/06/03 Javascript
Javascript图片上传前的本地预览实例
2014/06/16 Javascript
javascript实现无限级select联动菜单
2015/01/02 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
2015/09/19 Javascript
BootStrap树状图显示功能
2016/11/24 Javascript
详解ES6中的let命令
2020/04/05 Javascript
ES6中Math对象新增的方法实例详解
2017/04/25 Javascript
ionic2自定义cordova插件开发以及使用(Android)
2017/06/19 Javascript
vue实现双向绑定和依赖收集遇到的坑
2018/11/29 Javascript
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
微信小程序如何实现全局重新加载
2019/06/05 Javascript
Vue 实现前进刷新后退不刷新的效果
2019/06/14 Javascript
微信小程序组件传值图示过程详解
2019/07/31 Javascript
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
使用Taro实现小程序商城的购物车功能模块的实例代码
2020/06/05 Javascript
浅谈实现在线预览PDF的几种解决办法
2020/08/10 Javascript
jquery实现简单每周轮换的日历
2020/09/10 jQuery
[04:05]TI9战队采访 - Natus Vincere
2019/08/22 DOTA
python的常见命令注入威胁
2013/02/18 Python
python设计模式大全
2016/06/27 Python
Moda Operandi官网:美国奢侈品电商,海淘秀场T台同款
2020/05/26 全球购物
计算机科学系职业生涯规划书
2014/03/08 职场文书
致共产党员倡议书
2014/04/16 职场文书
学校教研活动总结
2014/07/02 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
开票证明
2015/06/23 职场文书
客户答谢会致辞
2015/07/30 职场文书
教师病假条范文
2015/08/17 职场文书
2016入党积极分子党课学习心得体会
2015/10/09 职场文书
Python基础教程,Python入门教程(超详细)
2021/06/24 Python