Js中Number对象

JavaScriptNumber对象是经过封装从而能够处理数字值的对象,Number对象由Number()构造器以及字面量声明的值在转化为包装对象时创建,JavaScriptNumber类型为双精度IEEE 754 64位浮点类型。

描述

创建一个数字可以通过字面量的方式,通过字面量创建的数字变量在调用方法的时候能够自动转化为临时的包装对象,从而能够调用其构造函数的原型中的方法,也可以利用Number对象生成数值对象,JavaScriptNumber类型为双精度IEEE 754 64位浮点类型,如果是索引数字例如Array.length则是32位单精度,此外当JavaScript遇到一个数值时,其会首先尝试按整数处理数值,如果可以作为整数处理就使用有符号32位整型处理,如果数值不能作为整数或者超出有符号整型范围,就把数值保存为64位的IEEE 754浮点数。

var a = 1;
var b = Number("1");
var c = new Number("1");
console.log(a); // 1
console.log(b); // 1
console.log(c); // Number {1}
console.log(a instanceof Number); // false
console.log(b instanceof Number); // false
console.log(c instanceof Number); // true
var arr = new Array(Math.pow(2,32)-1); // 4294967295 // [0 - 4294967294]
console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991
console.log(Number("a")); // NaN // NaN !== NaN
console.log(Number("1.1")); // 1.1
console.log(Number("0x11")); // 17
console.log(Number("0b11")); // 3
console.log(Number("0o11")); // 9
console.log(Number("Infinity")); // Infinity

属性

  • Number.EPSILON: 两个可表示representable数之间的最小间隔。
  • Number.MAX_SAFE_INTEGER: JavaScript中最大的安全整数2^53 - 1
  • Number.MAX_VALUE: 能表示的最大正数,最小的负数是-MAX_VALUE
  • Number.MIN_SAFE_INTEGER: JavaScript中最小的安全整数-(2^53 - 1).
  • Number.MIN_VALUE: 能表示的最小正数即最接近0的正数,实际上不会变成0,最大的负数是-MIN_VALUE
  • Number.NaN: 特殊的非数字值。
  • Number.NEGATIVE_INFINITY: 特殊的负无穷大值,在溢出时返回该值。
  • Number.POSITIVE_INFINITY: 特殊的正无穷大值,在溢出时返回该值。
  • Number.prototype: Number对象上允许的额外属性。

方法

Number.isNaN()

Number.isNaN(value)

Number.isNaN()方法确定传递的值是否为NaN,并且检查其类型是否为Number,其是原来的全局isNaN()的更稳妥的版本。

console.log(Number.isNaN(NaN)); // true // NaN !== NaN
console.log(Number.isNaN(Number("1"))); // false
console.log(Number.isNaN(Number("a"))); // true

Number.isFinite()

Number.isFinite(value)

Number.isFinite()方法用来检测传入的参数是否是一个有穷数。

console.log(Number.isFinite(NaN)); // false
console.log(Number.isFinite("1")); // false // 全局方法 isFinite("1") 返回 true
console.log(Number.isFinite(1 / 0)); // false
console.log(Number.isFinite(0 / 0)); // false
console.log(Number.isFinite(0.1 + 0.1)); // true
console.log(Number.isFinite(Infinity)); // false

Number.isInteger()

Number.isInteger(value)

Number.isInteger()方法用来判断给定的参数是否为整数。

console.log(Number.isInteger(NaN)); // false
console.log(Number.isInteger("1")); // false
console.log(Number.isInteger(1)); // true

Number.isSafeInteger()

Number.isSafeInteger(testValue)

Number.isSafeInteger()方法用来判断传入的参数值是否是一个安全整数safe integer。一个安全整数是一个符合下面条件的整数:

  • 可以准确地表示为一个IEEE-754双精度数字。
  • IEEE-754表示不能是舍入任何其他整数以适应IEEE-754表示的结果。

例如,2^53 - 1是一个安全整数,它能被精确表示,在任何IEEE-754舍入模式rounding mode下,没有其他整数舍入结果为该整数。作为对比,2^53就不是一个安全整数,它能够使用IEEE-754表示,但是2^53 + 1不能使用IEEE-754直接表示,在就近舍入round-to-nearest和向零舍入中,会被舍入为 2^53。安全整数范围为-(2^53 - 1)2^53 - 1之间的整数,包含-(2^53 - 1)2^53 - 1

console.log(Number.isSafeInteger(NaN)); // false
console.log(Number.isSafeInteger(1)); // true
console.log(Number.isSafeInteger(1.1)); // false
console.log(Number.isSafeInteger("1")); // false
console.log(Number.isSafeInteger(Math.pow(2, 53))); // false
console.log(Number.isSafeInteger(Math.pow(2, 53) - 1)); // true
console.log(Number.isSafeInteger(Infinity)); // false

Number.parseFloat()

Number.parseFloat(string)

Number.parseFloat()方法可以把一个字符串解析成浮点数,如果无法被解析成浮点数,则返回NaN,该方法与全局的parseFloat()函数相同,并且处于ECMAScript 6规范中,用于全局变量的模块化。

console.log(Number.parseFloat(NaN)); // NaN
console.log(Number.parseFloat("1.1")); // 1.1
console.log(Number.parseFloat(Infinity)); // Infinity

Number.parseInt()

Number.parseInt(string[, radix])

Number.parseInt()方法依据指定基数即参数radix的值,把字符串解析成整数,如果无法被解析成整数,则返回NaN,该方法与全局的parseInt()函数相同,并且处于ECMAScript 6规范中,用于全局变量的模块化。

console.log(Number.parseInt(NaN)); // NaN
console.log(Number.parseInt("1.1")); // 1
console.log(Number.parseInt("11")); // 11
console.log(Number.parseInt("11", 2)); // 3
console.log(Number.parseInt("11", 3)); // 4
console.log(Number.parseInt("11", 8)); // 9
console.log(Number.parseInt("11", 16)); // 17
console.log(Number.parseInt(Infinity)); // NaN

Number.prototype.toExponential()

numObj.toExponential(fractionDigits)

toExponential()方法以指数表示法返回该数值字符串表示形式。参数fractionDigits可选,其为一个整数用来指定小数点后有几位数字,默认情况下用尽可能多的位数来显示数字。返回一个用幂的形式 (科学记数法) 来表示Number对象的字符串,小数点后以fractionDigits提供的值来四舍五入,如果fractionDigits参数被忽略了,小数点后的将尽可能用最多的位数来表示该数值,对数值字面量使用toExponential()方法,且该数值没有小数点和指数时,应该在该数值与该方法之间隔开一个空格,以避免点号被解释为一个小数点,也可以使用两个点号调用该方法。如果一个数值的小数位数多余fractionDigits参数所提供的,则该数值将会在fractionDigits指定的小数位数处四舍五入。

var num = new Number(100.1);
console.log(num.toExponential()); // 1.001e+2

Number.prototype.toFixed()

numObj.toFixed(digits)

toFixed()方法使用定点表示法来格式化一个数值,该数值在必要时进行四舍五入,另外在必要时会用0来填充小数部分。参数digits是小数点后数字的个数,介于020(包括)之间,实现环境可能支持更大范围,如果忽略该参数,则默认为0

var num = new Number(1.1);
console.log(num.toFixed(6)); // 1.100000

Number.prototype.toLocaleString()

numObj.toLocaleString([locales [, options]])

toLocaleString()方法返回这个数字在特定语言环境下的表示字符串。新的localesoptions参数让应用程序可以指定要进行格式转换的语言,并且定制函数的行为。在旧的实现中,会忽略localesoptions参数,使用的语言环境和返回的字符串的形式完全取决于实现方式。

var num = new Number(1.1);
console.log(num.toLocaleString()); // 1.1

Number.prototype.toPrecision()

numObj.toPrecision(precision)

toPrecision()方法以指定的精度返回该数值对象的字符串表示。参数precision可选,一个用来指定有效数个数的整数。

var num = new Number(1.1);
console.log(num.toPrecision(6)); // 1.100000

Number.prototype.toString()

numObj.toString([radix])

toString()方法返回指定Number对象的字符串表示形式。参数radix指定要用于数字到字符串的转换的基数(从236),如果未指定radix参数,则默认值为10

var num = new Number(10);
console.log(num.toString(2)); // 1010

Number.prototype.valueOf()

numObj.valueOf()

valueOf()方法返回一个被Number对象包装的原始值。

var num = new Number(10);
console.log(num.valueOf()); // 10

每日一题

https://github.com/WindrunnerMax/EveryDay

参考

https://www.boatsky.com/blog/26
https://segmentfault.com/a/1190000000407658
https://blog.csdn.net/abcdu1/article/details/75095781
https://en.wikipedia.org/wiki/Floating-point_arithmetic
https://blog.csdn.net/weixin_43675244/article/details/89518309
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number

Js中Number对象的更多相关文章

  1. js中Number对象与MATH方法整理总结

    W3C的文档: Number 对象属性 属性 描述 constructor 返回对创建此对象的 Number 函数的引用. MAX_VALUE 可表示的最大的数. MIN_VALUE 可表示的最小的数 ...

  2. js中判断对象具体类型

    大家可能知道js中判断对象类型可以用typeof来判断.看下面的情况 <script> alert(typeof 1);//number alert(typeof "2" ...

  3. 浅解析js中的对象

    浅解析js中的对象 原文网址:http://www.cnblogs.com/foodoir/p/5971686.html,转载请注明出处. 前面的话: 说到对象,我首先想到的是每到过年过节见长辈的时候 ...

  4. js中推断对象详细类型

    大家可能知道js中推断对象类型能够用typeof来推断. 看以下的情况 <script> alert(typeof 1);//number alert(typeof "2&quo ...

  5. JS中的对象和方法简单剖析

    众所周知,在js中对象就是精髓,不理解对象就是不理解js. 那么什么事js中的对象呢? 在js中,几乎一切皆对象: Boolean ,String,Number可以是对象(或者说原生数据被认作对象): ...

  6. 深入理解JS中的对象(一)

    目录 一切皆是对象吗? 对象 原型与原型链 构造函数 参考 1.一切皆是对象吗? 首先,"在 JavaScript 中,一切皆是对象"这种表述是不完全正确的. JavaScript ...

  7. 深入理解JS中的对象(二):new 的工作原理

    目录 序言 不同返回值的构造函数 深入 new 调用函数原理 总结 参考 1.序言 在 深入理解JS中的对象(一):原型.原型链和构造函数 中,我们分析了JS中是否一切皆对象以及对象的原型.原型链和构 ...

  8. JS高级面试题思路(装箱和拆箱、栈和堆、js中sort()方法、.js中Date对象中的getMounth() 需要注意的、开发中编码和解码使用场景有哪些)

    1.装箱和拆箱: 装箱:把基本数据类型转化为对应的引用数据类型的操作: var num = 123 // num var objNum = new Num(123) // object console ...

  9. js中XMLHttpRequest对象实现GET、POST异步传输

    js中XMLHttpRequest对象实现GET.POST异步传输 /* * 统一XHR接口 */ function createXHR() { // IE7+,Firefox, Opera, Chr ...

  10. JavaScript学习12 JS中定义对象的几种方式

    JavaScript学习12 JS中定义对象的几种方式 JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工 ...

随机推荐

  1. 【SHELL】获取脚本输入参数

    参数获取 EXEC_PARAMS=(${@:index}) 示例 ./do.sh test a b c d e f EXEC_PARAMS=(${@:0}) ./do.sh test a b c d ...

  2. 【Gui-Guider】安装后运行模拟器报 JAVA 错误

    运行模拟器出错 上述错误是因为需要JAVA环境 JAVA 环境下载网址 https://www.oracle.com/java/technologies/javase-jdk16-downloads. ...

  3. Mygin 实现简单Http

    本篇是完全参考gin的功能,自己手动实现一个类似的功能,帮助自己理解和学习gin框架 目的 简单介绍net/http库以及http.Handler接口 实现简单的功能 标准库启动Web服务 impor ...

  4. [转帖]jmeter实现不写代码把测试结果存入execl

    这里使用数据库作为中间件来实现不写代码就把测试结果存入execl,下面是步骤 1.新建一个setup线程组用来设置数据库连接信息和新建数据库,如下图所示,我们使用sqlite数据库来存储信息,因为不需 ...

  5. [转帖]ioping测试

    https://www.cnblogs.com/ishmaelwanglin/p/10839702.html 一个实时显示磁盘io延时的工具,以类似ping 的输出一样展示输出结果 常用参数: -c ...

  6. Cosmic云星瀚的简单学习-测试用户创建

    摘要 上一个学习文档里面总结了: 修改domain的url之后就可以重启服务然后登录了. 今天中午创建了一个业务用户,发现还挺麻烦的 因为可能短信服务有问题, 所以我这边需要有改数据库表的需求. 这里 ...

  7. 部分操作系统不支持 zip unzip 大于4G的文件.

    https://www.ibm.com/mysupport/s/question/0D50z00006PD9XXCA1/bad-zipfile-offset-local-header-sig-erro ...

  8. 手写promise完成异常处理和状态只能够修改一次

    8.处理 Promise 抛出的异常 <script src="./Promise.js"></script> <script type=" ...

  9. js分钟转化为小时并且以某个数字进行递增

    有些时候,我们需要将分钟转为小时: 并且还有以一个数字进行递增: 呈现出[3,6,9,12,15,18]这样的递增形式 // 因为是递增,所以是相加: // 在使用+号的时候: // 注意两边都是数字 ...

  10. interface{}类型 + fmt.Sprintf() 导致栈逃逸

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 对部分代码进行了栈逃逸检查: go build -gcfl ...