ES6学习笔记(三)——数值的扩展
看到这条条目录有没有感觉很枯燥,觉得自己的工作中还用不到它所以实在没有耐心看下去,我也是最近得闲,逼自己静下心来去学习去总结,只有在别人浮躁的时候你能静下心来去学去看去总结,你才能进步。毕竟作为前端不断学习掌握新技术才能跟得上瞬息万变的潮流。
南方地区进入了梅雨季,最近一段时间天气不太好不是下雨就是阴天,湿气比较重。话说还真有点不习惯
别跑题了O(∩_∩)O哈哈~,开始搬砖^O^
JS中的数据类型有:字符串、数字、布尔、数组、对象、Null、Undefined
本篇是:数值的扩展
数值是js数据类型之一,是基本类型。
1.二进制和八进制表示法
个人觉得有必要先了解一下对应的英文,这里贴出来了,二进制:binary 八进制:octonary 十进制:decimal 十六进制:hexadecimal
ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b
(或0B
)和0o
(或0O
)表示。
0b111110111 === 503 // true
0o767 === 503 // true
从 ES5 开始,在严格模式之中,八进制就不再允许使用前缀0
表示,ES6 进一步明确,要使用前缀0o
表示。
如果要将0b
和0o
前缀的字符串数值转为十进制,要使用Number
方法。
2.Number.isFinite()、Number.isNaN()
ES6 在Number
对象上,新提供了这两个方法。
(1)Number.isFinite()
用来检查一个数值是否为有限的(finite)。
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()
用来检查一个值是否为NaN
。
Number.isNaN(NaN) // true
Number.isNaN(9/NaN) // true Number.isNaN(15) // false
Number.isNaN('15') // false Number.isNaN(true) // false
Number.isNaN('true'/0) // true
Number.isNaN('true'/'true') // true
3.Number.parseInt()、Number.parseFloat()
ES6 将全局方法parseInt()
和parseFloat()
,移植到Number
对象上面,行为完全保持不变。
逐步减少全局性方法,使得语言逐步模块化。
// ES5的写法
parseInt('12.34') //
parseFloat('123.45#') // 123.45 // ES6的写法
Number.parseInt('12.34') //
Number.parseFloat('123.45#') // 123.45
4.Number.isInteger()
Number.isInteger()
用来判断一个值是否为整数。需要注意的是,在 JavaScript 内部,整数和浮点数是同样的储存方法,所以3和3.0被视为同一个值。
Number.isInteger(25) // true
Number.isInteger(25.0) // true
Number.isInteger(25.1) // false
5.Number.EPAILON
ES6在Number对象上面,新增一个极小的常量Number.EPSILON
。
引入一个这么小的量的目的,在于为浮点数计算,设置一个误差范围。
console.log(0.1+0.2)
// 0.30000000000000004
console.log(0.1+0.2-0.3)
//5.551115123125783e-17
如果这个误差能够小于Number.EPSILON
,我们就可以认为得到了正确结果。
5.551115123125783e-17 < Number.EPSILON
//true
因此,Number.EPSILON
的实质是一个可以接受的误差范围。
6.安全整数和Number.isSafeInteger()
JavaScript能够准确表示的整数范围在-2^53
到2^53
之间(不含两个端点),超过这个范围,无法精确表示这个值。
Math.pow(2, 53) //
Math.pow(2, 53) === Math.pow(2, 53) + 1
//true
ES6引入了Number.MAX_SAFE_INTEGER
和Number.MIN_SAFE_INTEGER
这两个常量,用来表示这个范围的上下限。
Number.MAX_SAFE_INTEGER === Math.pow(2, 53) - 1
// true
Number.MAX_SAFE_INTEGER === 9007199254740991
// true Number.MIN_SAFE_INTEGER === -Number.MAX_SAFE_INTEGER
// true
Number.MIN_SAFE_INTEGER === -9007199254740991
// true
实际使用这个函数时,需要注意。验证运算结果是否落在安全整数的范围内,不要只验证运算结果,而要同时验证参与运算的每个值。
Number.isSafeInteger(9007199254740993)
// false
Number.isSafeInteger(990)
// true
Number.isSafeInteger(9007199254740993 - 990)
// true
9007199254740993 - 990
// 返回结果 9007199254740002
// 正确答案应该是 9007199254740003
9007199254740993
不是一个安全整数,但是Number.isSafeInteger
会返回结果,显示计算结果是安全的。这是因为,这个数超出了精度范围,导致在计算机内部,以9007199254740992
的形式储存。
9007199254740993 === 9007199254740992
// true
亲自验证一下他输出的结果,像是睁着眼睛说瞎话一样,输出的结果果然很直白,O(∩_∩)O哈哈~
7.Math对象的扩展(ES6在Math对象上新增了17个与数学相关的方法)
ES6在Math对象上新增了17个与数学相关的方法。所有这些方法都是静态方法,只能在Math对象上调用。
此处列举每个方法 但不一一举例了 见谅
(1)Math.trunc() 用于去除一个数的小数部分,返回整数部分。
注意:
- a:对于非数值,
Math.trunc
内部使用Number
方法将其先转为数值; - b:对于空值和无法截取整数的值,返回NaN。
(2)Math.sign()
用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。
它会返回五种值。
- 参数为正数,返回+1;
- 参数为负数,返回-1;
- 参数为0,返回0;
- 参数为-0,返回-0;
- 其他值,返回NaN。
(3)Math.cbrt
方法用于计算一个数的立方根。
注意:
- 对于非数值,
Math.cbrt
方法内部也是先使用Number
方法将其转为数值。
(4)Math.clz32
方法返回一个数的32位无符号整数形式有多少个前导0。
(5)Math.imul
方法返回两个数以32位带符号整数形式相乘的结果,返回的也是一个32位的带符号整数。
(6)Math.fround方法返回一个数的单精度浮点数形式。
(7)Math.hypot
方法返回所有参数的平方和的平方根。
注意:
- 如果参数不是数值,
Math.hypot
方法会将其转为数值。只要有一个参数无法转为数值,就会返回NaN。
(8)对数方法,ES6新增了4个对数相关方法。
Math.expm1(x)
返回ex - 1,即Math.exp(x) - 1
。Math.log1p(x)
方法返回1 + x
的自然对数,即Math.log(1 + x)
。如果x
小于-1,返回NaN
。Math.log10(x)
返回以10为底的x
的对数。如果x
小于0,则返回NaN。Math.log2(x)
返回以2为底的x
的对数。如果x
小于0,则返回NaN。
(9)三角函数方法, ES6新增了6个三角函数方法
Math.sinh(x)
返回x
的双曲正弦(hyperbolic sine)Math.cosh(x)
返回x
的双曲余弦(hyperbolic cosine)Math.tanh(x)
返回x
的双曲正切(hyperbolic tangent)Math.asinh(x)
返回x
的反双曲正弦(inverse hyperbolic sine)Math.acosh(x)
返回x
的反双曲余弦(inverse hyperbolic cosine)Math.atanh(x)
返回x
的反双曲正切(inverse hyperbolic tangent)
.指数运算符
let a = 1.5;
a **= 2;
// 等同于 a = a * a; let b = 4;
b **= 3;
// 等同于 b = b * b * b;
指数运算符可以与等号结合,形成一个新的赋值运算符(**=
)。
Finaly,附参考文献http://es6.ruanyifeng.com/#docs/number
ES6学习笔记(三)——数值的扩展的更多相关文章
- ES6学习笔记(5)----数值的扩展
参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ 数值的扩展 1.Number对象的扩展(1)javascript的全局函数isNaN,isFin ...
- ES6学习笔记<三> 生成器函数与yield
为什么要把这个内容拿出来单独做一篇学习笔记? 生成器函数比较重要,相对不是很容易理解,单独做一篇笔记详细聊一聊生成器函数. 标题为什么是生成器函数与yield? 生成器函数类似其他服务器端语音中的接口 ...
- es6学习笔记--字符串&数值&数组&函数&对象的扩展
这几天抽空学习了es6语法,关于字符串,数值,数组,函数以及对象的扩展,看到es6标准入门这本书,里面讲的扩展特别多,我认为有几部分在项目上用不到,就挑有用的当笔记学习了. 字符串的扩展 str.in ...
- es6学习笔记9--函数的扩展
函数参数的默认值 基本用法 在ES6之前,不能直接为函数的参数指定默认值,为了避免这个问题,通常需要先判断一下参数y是否被赋值,如果没有,再等于默认值. ES6允许为函数的参数设置默认值,即直接写在参 ...
- ES6 学习笔记之四 对象的扩展
ES6 为对象字面量添加了几个实用的功能,虽然这几个新功能基本上都是语法糖,但确实方便. 一.属性的简洁表示法 当定义一个对象时,允许直接写入一个变量,作为对象的属性,变量名就是属性名. 例1: , ...
- ES6学习笔记(一)——扩展运算符和解构赋值
前言 随着前端工程化的快速推进,在项目中使用ES6甚至更高的ES7等最近特性早已不是什么新鲜事.之前还觉得既然浏览器支持有限,那了解一下能看懂就好,然而仅仅了解还是不够的,现在放眼望去,那些成熟框架的 ...
- ES6学习笔记三:Symbol、Set、Map
一:Symbol ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值.它是 JavaScript 语言的第七种数据类型,前六种是:undefined.null.布尔值(Boolean). ...
- ES6学习笔记二:各种扩展
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7242967.html 一:字符串扩展 1:字符串遍历器 for (let char of str) { // ...
- ES6学习笔记(8)----对象的扩展
参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ 对象的扩展 1.属性名的简洁表示法 : ES6允许在代码中直接写变量,变量名是属性名,变量值是属 ...
随机推荐
- JSON——Java中的使用
1. 构建JSON方法(数据——>JSON) 这里使用Maven构建项目 在pom.xml中添加如下依赖 <dependency> <groupId>org.json&l ...
- 把sqlserver查询结果复制到Excel出现数据记录遗漏
问题:今天在sqlserver查询,总共有10000记录,把结果复制到Excel,发现少掉352条,用导出csv也是如此. 原因:经排查发现缺少的记录是因为商品名称字段包含英文双引号". 解 ...
- 工作总结 Ajax.BeginForm 默认action
生成源代码 点提交 总结 BeginForm 的 active 默认指向 进当前页面的 操作方法 若第一次进页面时带着参数, 那么也会将参数放到active 简单点 BeginForm 的 a ...
- Sublime text 3 搭建Python3 IDE
起因:为了提高编码工作中的体验,Sublime Text:不仅具有华丽的界面,还支持插件扩展机制,用她来写代码,绝对是一种享受. Vim难于上手,Eclipse,VS 体积庞大,即便体积轻巧迅速启动的 ...
- webpack 环境搭建基础框架
一.安装babel相关 1,安装依赖 cnpm i -D babel-core babel-loader babel-preset-env babel-preset-stage- babel-plug ...
- 我的 Android 学习笔记-Okhttp 的使用(译)
okhttp 已经是非常流行的网络请求库了.网上介绍的文章非常之多,但感觉都不是特别系统.遂想到官方应该有介绍的文档,仔细寻找一番,果然.但可惜是英文的,于是就大致翻译了一下,权当做笔记了. 1.Ca ...
- 使用scp免passwordserver间传递文件
1.aserver下执行命令 ssh-keygen -t rsa 2.三个回车 3.在用户的文件夹下 ~/.ssh/产生两个文件,id_rsa,id_rsa.pub 4.把aserver下相应的文件 ...
- 基于Away3D实现全景的相机控制器。
最近研究打算做个全景的Demo,发现Away3D本身的天空盒跟全景属于两种完全不同东西.最后只能基于HoverController来扩展(原因是HoverController能提供的距离控制,类似拉近 ...
- Unity3d 引擎原理详细介绍、Unity3D引擎架构设计 - zhibolife
时间 2014-03-24 11:18:00 博客园-所有随笔区原文 http://www.cnblogs.com/zhibolife/p/3620440.html 体系结构 为了更好地理解游戏的 ...
- windows 8.1 安装 .Net Framework 3.5
1.挂载IOS虚拟光驱 2.命令提示符(管理员) dism.exe /online /enable-feature /featurename:NetFX3 /Source:F:\sources\s ...