JavaScript学习笔记--ES6学习(五) 数值的扩展
ES6 对于数值类型 (Number) 进行了一下扩展:
1.对于二进制和八进制提供了新的写法
ES6对于二进制和八进制的数值提供了新的写法,分别用0b (或者0B) 和0o (或者0o) 表示。例如:
0b111110111 === 503 // true 0o767 === 503 //true
由于从ES5开始,严格模式中,八进制不再允许使用前缀0来表示,因此在ES6中进一步明确,要用0o来表示。
如果要将0b和0o前缀的字符串数值转换为十进制,要使用Number方法, 例如:
var integerNumber = Number(0b111110111); integerNumber //
2.ES6在Number对象新增了方法:
(1)Number.isFinite()
Number.isFinite()方法用来检查一个数值是否是有限的(finite), 使用举例:
Number.isFinite(15); // true
Number.isFinite(0.8); // true
Number.isFinite(NaN); // false
Number.isFinite(Infinity); // false
Number.isFinite(-Infinity); // false
Number.isFinite('foo'); // false
Number.isFinite('15'); // false
Number.isFinite(true); // false
(2)Number.isNaN()
Number.isNaN() 方法用来检查一个值是否是NaN, 使用如下:
Number.isNaN(NaN) // true
Number.isNaN(15) // false
Number.isNaN('15') // false
Number.isNaN(true) // false
Number.isNaN(9/NaN) // true
Number.isNaN('true'/0) // true
Number.isNaN('true'/'true') // true
Number.isNaN 以及 Number.isFinite() 与传统的方法isNaN()和isFinite()的区别在于: 传统的方法中,首先将参数转换为数值类型(用Number())然后再判断,而这两个方法只对数值有效,非数值类型一律返回false。 这从上面的例子也可以看出。
(3)Number.parseInt(), Number.parseFloat()
ES6 中将全局方法parseInt() 和parseFloat() 移植到了Number对象上,行为完全保持不变:
Number.parseInt === parseInt // true
Number.parseFloat === parseFloat // true
这样做的好处是逐步的替代全局方法。这也是ES6的方向。
(4)Number.isInteger()
Number.isInteger()用来判断一个值是否为整数。
在JavaScript的内部,整数和浮点数是使用同样的存储方法,因此3 和3.0 被视为同一个值。 因此需要有一个方法来区分整数和浮点数。
同样,isInteger()只对数值类型有效:
Number.isInteger(25) // true
Number.isInteger(25.0) // true
Number.isInteger(25.1) // false
Number.isInteger("15") // false
Number.isInteger(true) // false
(5)Number.EPSILON
Number.EPSILON是ES6在Number对象上新增的一个极小常量,目的在于为浮点数计算设置一个误差范围。
由于JavaScript中浮点数的计算并不精确,浮点数的计算误差如果能小鱼Number.EPSILON,就可以认为得到了正确结果,因此, Number.EPSILON的实质是一个可以接受的误差范围。
(6) 安全整数
JavaScript能够精确标识 的整数范围在 -2^53 到 2^53之间(不含两端),超过这个范围就无法精确表示。
因此,ES6引入了Number.MAX_SAFE_INTEGER 和 Number.MIN_SAFE_INTEGER 这两个常量,用来标识这个范围的上下限。
Number.isSafeInteger()方法 用来判断一个整数是否在这个安全范围之内,同时,不是number的参数一律返回false:
Number.isSafeInteger('a') // false
Number.isSafeInteger(null) // false
Number.isSafeInteger(NaN) // false
Number.isSafeInteger(Infinity) // false
Number.isSafeInteger(-Infinity) // false
Number.isSafeInteger(3) // true
Number.isSafeInteger(1.2) // false
Number.isSafeInteger(9007199254740990) // true
Number.isSafeInteger(9007199254740992) // false
Number.isSafeInteger(Number.MIN_SAFE_INTEGER - 1) // false
Number.isSafeInteger(Number.MIN_SAFE_INTEGER) // true
Number.isSafeInteger(Number.MAX_SAFE_INTEGER) // true
Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1) // false
3.ES6 对Math对象进行了扩展:
(1)Math.trunc()
Math.trunc()方法用于去除一个数的小数部分,返回整数部分。对于非数值类型,Math.trunc() 方法内部使用Number() 方法将参数先转为数值,然后再计算。对于无法截取证书的,返回NaN。
Math.trunc(4.1) //
Math.trunc(4.9) //
Math.trunc(-4.1) // -4
Math.trunc(-4.9) // -4
Math.trunc(-0.1234) // -0Math.trunc(NaN); // NaN
Math.trunc('foo'); // NaN
(2)Math.sign()
Math.sign() 方法用来判断一个数到底是整数、负数还是零:
如果参数为正数,返回+1;参数为负数, 返回 -1;参数为0, 返回0; 参数为-0, 返回 -0; 其他值,返回NaN;
Math.sign(-5) // -1
Math.sign(5) // +1
Math.sign(0) // +0
Math.sign(-0) // -0
Math.sign(NaN) // NaN
Math.sign('foo'); // NaN
Math.sign(); // NaN
(3)Math.cbrt()
Math.cbrt() 方法用于计算一个数的立方根
Math.clz32() 返回一个数的32为无符号整数形式有多少个前导0:
Math.clz32(0) //
Math.clz32(1) //
Math.clz32(1000) //
Math.clz32(0b01000000000000000000000000000000) //
Math.clz32(0b00100000000000000000000000000000) //
clz : count leading zero bits in 32-bit binary representations of a number (计算32位整数的前导0)
左移运算符(<<)和Math.clz32() 方法直接相关:
Math.clz32(0) //
Math.clz32(1) //
Math.clz32(1 << 1) //
Math.clz32(1 << 2) //
Math.clz32(1 << 29) //
对于小数,Math.clz32方法只考虑整数部分。
Math.clz32(3.2) //
Math.clz32(3.9) //
(4)Math.hypot()
Math.hypot() 方法返回所有参数的平方和的平方根:
Math.hypot(3, 4); // 5 3^2 + 4 ^2 = 5^2
Math.hypot(3, 4, 5); // 7.0710678118654755
Math.hypot(); //
Math.hypot(NaN); // NaN
Math.hypot(3, 4, 'foo'); // NaN
Math.hypot(3, 4, '5'); // 7.0710678118654755
Math.hypot(-3); //
4.指数运算符
ES7新增了一个指数运算符(**) 目前Babel转码器已经支持
2 ** 2 //
2 ** 3 //
JavaScript学习笔记--ES6学习(五) 数值的扩展的更多相关文章
- ES6学习笔记(四)数值的扩展
1.二进制和八进制表示法 ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示. 0b111110111 === 503 // true 0o767 === 503 ...
- JavaScript 学习笔记-- ES6学习(一)介绍以及Babel的使用
本文摘自阮一峰老师的<ECMAScript 6入门>,原文地址:http://es6.ruanyifeng.com/#docs/intro ECMAScript 6 是一个泛指,含义是5. ...
- JavaScript学习笔记--ES6学习(四) 字符串的扩展
ES6对字符串进行了一些扩展,主要表现在对Unicode 大于\uFFFF的字符的处理上. 1. ES6中字符的Unicode表示方法 在ES5中,字符串的Unicode表示方法: \uxxxx . ...
- JavaScript学习笔记 -- ES6学习(三) 变量的解构赋值
1.解构赋值的定义 在ES6中,允许按照一定模式,从数组和对象中提取值(所谓解构),然后对变量进行赋值. var a = 1; var b = 2; var c = 3; //等价于 var [a, ...
- JavaScript学习笔记 -- ES6学习(二) let 和const
ES6 中新增了两个命令: let 和const. let命令: let 用于声明变量,和var 类似,但是所声明的变量只在代码块中有效,不存在变量提升,有暂时性死区. 1.只在代码块中有效 和var ...
- VSTO学习笔记(十五)Office 2013 初体验
原文:VSTO学习笔记(十五)Office 2013 初体验 Office 2013 近期发布了首个面向消费者的预览版本,我也于第一时间进行了更新试用.从此开始VSTO系列全面转向Office 201 ...
- Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...
- [转]Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
本文转自:https://www.cnblogs.com/zhongweiv/p/nodejs_koa2_webapp.html 目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装 ...
- Nodejs学习笔记(十五)—Node.js + Koa2 构建网站简单示例
前言 前面一有写到一篇Node.js+Express构建网站简单示例:http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp.html 这篇还 ...
随机推荐
- IEEE 802
IEEE 802又称为LMSC(LAN /MAN Standards Committee, 局域网/城域网标准委员会), 致力于研究局域网和城域网的物理层和MAC层中定义的服务和协议, 对应OSI网络 ...
- 博弈论(SG函数):HNOI 2007 分裂游戏
Description 聪聪和睿睿最近迷上了一款叫做分裂的游戏. 该游戏的规则试: 共有 n 个瓶子, 标号为 0,1,2.....n-1, 第 i 个瓶子中装有 p[i]颗巧克力豆,两个人轮流取豆子 ...
- C++中的虚函数总结
一.什么是虚函数.纯虚函数.抽象基类 虚函数:在某基类中声明为 virtual 并在一个或多个派生类中被重新定 义的成员函数. 纯虚函数:是一种特殊的虚函数,使用virtual关键字,并且在其后面加上 ...
- 《JavaScript核心概念》基础部分重点摘录
注:<JavaScript核心概念>适合深入了解JavaScript,比我买的<JavaScript框架设计>语言和内容丰富多了(可能是我水平尚浅吧). 1. 作用域 var ...
- yarn安装部署
在HDFS HA(http://www.cnblogs.com/yinchengzhe/p/5140117.html)基础上进行yarn的安装. 1.配置yarn-site.xml 参数详情参考 ht ...
- HDOJ/HDU 2560 Buildings(嗯~水题)
Problem Description We divide the HZNU Campus into N*M grids. As you can see from the picture below, ...
- Individual Contest #1 and Private Training #1
第一次的增补赛,也是第一场个人排位赛,讲道理打的和屎一样,手速题卡了好久还WA了好多发,难题又切不出来,这种情况是最尴尬的吧! Individual Contest #1: Ploblem D: 题意 ...
- IOS 多个ImageView图片层叠透明区域点击事件穿透
经常用到多个透明图片层叠,但又需要获取不同图片的点击事件,本文实现图片透明区域穿透点击事件 实现人体各个部位点击 - (BOOL) pointInside:(CGPoint)point withEve ...
- CSS3弹性盒模型之Flexbox是布局模块box-sizing & box-orient & box-direction & box-ordinal-group
css3 box-sizing属性 box-sizing属性可以为三个值之一:content-box(default),border-box,padding-box. content-box,bord ...
- Sencha Touch 和 jQuery Mobile 的比较
Sencha Touch 和 jQuery Mobile 的比较 英文原文:Sencha Touch vs jQuery Mobile 标签: Sencha Touch jQuery Mobile 1 ...