前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JS原生引用类型解析5-Number类型

JS原生引用类型解析5-Number类型

作者头像
love丁酥酥
发布2018-08-27 15:41:08
2.1K0
发布2018-08-27 15:41:08
举报
文章被收录于专栏:coding for love

(注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!)

(注2:更多内容请查看我的目录。)

1. 简介

为了便于操作基本类型值,ECMAScript提供了3个特殊的引用类型作为基本包装类型:String,Number和Boolean。实际上,每当读取一个基本类型值得时候,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据。

2. Number类型对象创建

Number类型是与数字值对应的引用类型,Number类型对象创建是使用Number构造函数。下面是使用Number构造函数传入不同类型参数后的情况。

代码语言:javascript
复制
// 传入Number类型
console.log(new Number(1));  // Number {1}
// 传入NaN类型
console.log(new Number(NaN));  // Number {NaN}
// 传入Infinity类型
console.log(new Number(Infinity));  // Number {Infinity}
// 传入String类型
console.log(new Number('123'));  // Number {123}
// 传入Undefined类型
console.log(new Number(undefined));  // Number {NaN}
// 传入Null类型
console.log(new Number(null));  // Number {0}
// 传入Boolean类型
console.log(new Number(true));  // Number {1}
// 传入Array类型
console.log(new Number([1,2]));  // Number {NaN}
// 传入Function类型
console.log(new Number(function(){return 1;}));  // Number {NaN}
// 传入Object类型
console.log(new Number({a: 1}));  // Number {NaN}
// 传入空对象
console.log(new Number({}));  // Number {NaN}

Number构造函数接收基本类型值时,能将其转换成对应的包含数字的对象,但是undefined会被转成{NaN},传入对象也会转换成{NaN}。

注意:null是基本类型值,是一个空对象指针,而{}是空对象。

省略new的效果一样。

3. 数字值读取

其实,在读取模式中访问数字值时,后台会自动完成以下处理:

(1)创建Number类型的一个实例;

(2)在实例上调用指定的方法;

(3)销毁该实例。

4. Number构造函数的属性与方法

我们用Object.getOwnPropertyNames()方法获取Number构造函数的所有属性与方法。

代码语言:javascript
复制
Object.getOwnPropertyNames(Number);
// (17) ["length", "name", "prototype", "isFinite", "isInteger", "isNaN", "isSafeInteger", "parseFloat", "parseInt", "MAX_VALUE", "MIN_VALUE", "NaN", "NEGATIVE_INFINITY", "POSITIVE_INFINITY", "MAX_SAFE_INTEGER", "MIN_SAFE_INTEGER", "EPSILON"]

发现一共有17个属性和方法。

4.1 Number构造函数的属性

Number.length

长度为1

Number.name

名称为"Number"

Number.prototype

指向Number构造函数的原型,可以为所有Number类型的对象添加属性。

Number.EPSILON

表示 1 和大于 1 的最小值的差值,是一个常量,接近于 2.2204460492503130808472633361816E-16,或者 2-52。引入这么小的一个常量的目的在于,为浮点数计算设置一个误差范围。因为浮点数的计算是不精确的。如果误差小于Number.EPSILON,我们就可以认为得到了正确的结果。

代码语言:javascript
复制
0.1+0.2;      //0.30000000000000004
0.1+0.2-0.3;     //5.551115123125783e-17
(0.1+0.2-0.3).toFixed(20);    //"0.00000000000000005551"
// 那么我们再来看看0.1+0.2-0.3的值是否小于Number.EPSILON,如果小于,返回true,那我们便可以认为结果正确
(0.1+0.2-0.3).toFixed(20)<Number.EPSILON;   // true

其实,Number.EPSILON就是一个可接受的误差范围。

Number.MAX_SAFE_INTEGER

该常量表示在 JavaScript 中最大的安全整数(maxinum safe integer)(253 - 1)。IEEE 754 标准规定能够准确地表示整数和正确地比较整数的数字范围是在 -(253 - 1) 到 253 - 1 之间,包含 -(253 - 1) 和 253 - 1。

Number.MIN_SAFE_INTEGER

代表在 JavaScript中最小的安全的integer型数字 (-(253 - 1)).

Number.MAX_VALUE

表示在 JavaScript 里所能表示的最大数值。该值接近于 1.79E+308,大于 MAX_VALUE 的值代表 "Infinity"。

Number.MIN_VALUE

表示在 JavaScript 里所能表示的最小的正数。MIN_VALUE 的值约为 5e-324。小于 MIN_VALUE ("underflow values") 的值将会转换为 0。

Number.NaN

表示“非数字”的值(Not-A-Number)。

Number.NEGATIVE_INFINITY

表示负无穷大,在溢出时返回该值。和全局对象的 Infinity 属性的负值相同。

为了成功返回一个有限值,你可能会使用 Number.NEGATIVE_INFINITY 属性来判断是否显示一个条件错误 。然而 isFinite()方法更适合这种情况。

Number.POSITIVE_INFINITY

表示正无穷大,在溢出时返回该值。和全局对象的 Infinity 属性的值相同。

为了成功返回一个有限值,你可能会使用 Number.POSITIVE_INFINITY 属性来判断是否显示一个条件错误 。然而 isFinite()方法更适合这种情况。

4.2 Number构造函数的方法

Number.isNaN()

确定传递的值是否是 NaN。

Number.isFinite()

确定传递的值类型及本身是否是有限数。

Number.isInteger()

判断给定的参数是否为整数。

Number.isSafeInteger()

确定传递的值是否为安全整数 ( -(253 - 1) 至 253 - 1之间)。

Number.parseFloat()

以把一个字符串解析成浮点数。该方法与全局的 parseFloat()函数相同。

Number.parseInt()

以把一个字符串解析成整数。该方法与全局的 parseFloat()函数相同。

5. Number原型对象的属性与方法

我们用Object.getOwnPropertyNames()方法获取Number原型对象的所有属性与方法。

代码语言:javascript
复制
Object.getOwnPropertyNames(Number.prototype);
// (7) ["constructor", "toExponential", "toFixed", "toPrecision", "toString", "valueOf", "toLocaleString"]

发现一共有7个属性和方法。其中有相当一部分是与HTML相关的方法。

5.1 Number原型对象的属性

Number.prototype.constructor

指向构造函数Array

5.2 Number原型对象的方法

注意:整数无法直接调用Number原型对象的方法(是JS装箱机制的原因吗?),但是将其赋值给变量以后可以。

Number.prototype.toExponential()

返回一个科学计数法字符串

代码语言:javascript
复制
console.log(3000.toExponential());  // 会报错
console.log(3000.0.toExponential());  // "3e+3"
console.log(new Number(3000).toExponential());  // "3e+3"

var a = 3000;
console.log(a.toExponential());  // "3e+3"

Number.prototype.toFixed()

转化成一个精确到小数点后指定位数的字符串返回,默认是小数点后0位。

代码语言:javascript
复制
console.log(3000.toFixed(2));  // 会报错
console.log(3000.0.toFixed(2));  // "3000.00"
console.log(new Number(3000).toFixed(2));  // "3000.00"

Number.prototype.toString()

转化成一个精确到指定进制的字符串返回,默认是十进制。

代码语言:javascript
复制
console.log(12.toString(16));  // 会报错
console.log(12.0.toString(16));  // "c"
console.log(new Number(12).toString(16));  // "c"

Number.prototype.toLocalString()

转化成一个精确到指定进制的字符串返回,默认是十进制。与语言相关,但大多数语言情况与Number.prototype.toString()相同。

Number.prototype.toPrecision()

转化成一个保留指定位数的字符串(四舍五入)返回。

代码语言:javascript
复制
console.log(666.toPrecision(2));  // 会报错
console.log(666.6666.toPrecision(2));  // "6.7e+2"
console.log(new Number(6666666).toPrecision(3));  // "6.67e+6"
console.log(6.67e+6.toPrecision(2));  // "6.7e+6"
console.log(new Number(6.6e+6).toPrecision(3));  // "6.60e+6"

Number.prototype.valueOf()

返回指定对象的原始值。覆盖了Object对象的 valueOf() 方法。

6. Number实例对象的属性与方法

我们用Object.getOwnPropertyNames()方法获取Number实例对象的所有属性与方法。

代码语言:javascript
复制
var num = new Number(123);
Object.getOwnPropertyNames(num);
// []

没有任何自有属性与方法。

参考

MDN-Number

BOOK-《JavaScript高级程序设计(第3版)》第5章

ES6中Number的一些扩展方法(一)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.02.25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 简介
  • 2. Number类型对象创建
  • 3. 数字值读取
  • 4. Number构造函数的属性与方法
    • 4.1 Number构造函数的属性
      • 4.2 Number构造函数的方法
      • 5. Number原型对象的属性与方法
        • 5.1 Number原型对象的属性
          • 5.2 Number原型对象的方法
          • 6. Number实例对象的属性与方法
          • 参考
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档