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. 3 分钟了解 NVIDIA 新出的 H200

    英伟达在 2023 年全球超算大会上发布了备受瞩目的新一代 AI 芯片--H200 Tensor Core GPU.相较于上一代产品 H100,H200 在性能上实现了近一倍的提升,内存容量翻倍,带宽 ...

  2. [转帖]如何修改Bash Shell的提示符的格式和配色

    https://zhuanlan.zhihu.com/p/348416919 我们大多数使用的shell提示符,显示用户名.主机名和当前所在目录.在本文将会介绍如何定制一个自己喜欢的Bash. 了解B ...

  3. [转帖]JVM性能提升50%,聊一聊背后的秘密武器Alibaba Dragonwell

    https://zhuanlan.zhihu.com/p/453437019 今年四月五日,阿里云开放了新一代ECS实例的邀测[1],Alibaba Dragonwell也在新ECS上进行了极致的优化 ...

  4. [转帖]ORACLE USERENV函数

    https://www.cnblogs.com/youngerger/p/8862210.html ORACLE USERENV函数 USERENV返回关于当前会话的信息.此信息可以用于编写一个应用程 ...

  5. [转帖]Springboot容器化镜像设置堆内存大小

    参考资料:Best Practices: Java Memory Arguments for Containers - DZone Java 有三种方式设置最大堆内存大小: 1. -Xmx 2. -X ...

  6. CentOS7 上面升级git 2.24的方法

    本来想使用tar包进行安装 但是发现tar包安装时总是报错如下: [root@centos76 git-2.25.0]# make LINK git-imap-send imap-send.o: In ...

  7. OpenGauss3.1.0 单机版安装部署过程

    背景 由易到难 先进行单节点的设置 先说坑 openEuler2203 默认安装了python3.9 但是openGauss里面指代了3.6和3.7 /openGauss/install/om 注意在 ...

  8. C#开源免费的开发效率提升利器:DevToys开发人员的瑞士军刀!

    前言 今天分享一款基于C#开源(MIT License开源协议).免费.离线.功能齐全的Windows开发者工具箱,号称开发人员的瑞士军刀,可以帮助开发者完成日常工作开发中常用功能:DevToys. ...

  9. axios发送请求时携带token

    请求头携带token async getUserlist(){ // 需要授权的Api,必须在青丘头中使用Authorization 字段提供token令牌 const AUTH_TOKEN=loca ...

  10. 【验证码逆向专栏】最新某度旋转验证码 v2 逆向分析

    声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容.敏感网址.数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未经许 ...