我所了解的es6(02)
栏目: JavaScript · 发布时间: 5年前
内容简介:###2.Number首先来谈一谈isFinite这个函数,是用来判断是否是有限的然后谈一谈isNaN,这个主要用来判断是否是NaN,当然这里必须得注意的是
话说最近大事儿有点勤啊。昨天下班的时候还聊到,google研制出了一款可以写前端代码。我们一群 程序员 底层人员还在担忧未来面临失业的问题,我们甚至都聊到了如果人工智能取代我们工作,那么我们将会面临被机器人统治的危险境地(科幻电影看多了)。晚上回到宿舍的时候翻了翻微信公众号上面的新闻又发现nodejs的发明家说了一句: Rather I will complain about all the warts in Node. Bugs are never so obvious as when you're the one responsible for them. At times Node is like nails on chalkboard to me. It could have been so much nicer. 打开github本来想瞧一瞧这新语言的魅力的时候,却又发现:
你无法去想象未来将会成什么样子,这也是你不能理解全球最大不开源的厂商会去收购全球最大开源厂商、你也无法去想象几个月以前被吹到天上去的nodejs会被面临抛弃的尴尬境地。也许未来人工智能会取代像我们这样低级程序员,即使是一天更换一种语言,但是只要我们能保持初心,一定能方得始终。但... ##一、数值的扩展 ###1. 进制表示法 es6其实提供了新的八进制的写法。众所周知,在es5的严格模式下面,八进制就不再允许使用前缀0表示。但是es6中定义了 0b 和 0o 来分别定义二进制数和八进制数。{ // es5中非严格模式下 (function(){ // "use strict" console.log(0o11 === 011) // true })() es5中严格模式下 (function(){ "use strict" console.log(0o11 === 011) // SyntaxError: Octal literals are not allowed in strict mode })() /** * es6中提供了新的写法 * 0b代表二进制 * 0o代表八进制 **/ console.log(0b111110111 === 503) // true console.log(0o767 === 503) // true // Number 方法可以把二进制和八进制转化成10进制数据 console.log(Number("0b111110111")) // 503 console.log(Number("0o767")) // 503 } 复制代码
###2.Number
首先来谈一谈isFinite这个函数,是用来判断是否是有限的
{ //我这里可以补充一下,也是我发现的 1/0会得到infinty console.log("Finite",Number.isFinite(0)) // true console.log(1/0) // Infinity console.log("Finite",Number.isFinite(1/0)) // false console.log("Finite",Number.isFinite("1/0")) // false console.log("Finite",Number.isFinite("klivitam")) // false console.log("Finite",Number.isFinite(NaN)) // false } 复制代码
然后谈一谈isNaN,这个主要用来判断是否是NaN,当然这里必须得注意的是
console.log("NaN",Number.isNaN(0)) // false console.log("NaN",Number.isNaN(NaN)) // true console.log("NaN",Number.isNaN("NaN")) // false console.log("NaN",Number.isNaN("klivitam")) // false console.log("NaN",Number.isNaN('true' / 0)) // true console.log("NaN",Number.isNaN(9/NaN)) // true console.log("NaN",Number.isNaN('true' / 'true')) // true 复制代码
在es6中将原本es5中的全局函数parseInt、parseFloast放入Number中。并且在本方法中,会尝试将非数值类型转化成数值类型,如果遇到不能转化的情况就直接返回NaN类型
//es5写法 console.log("parseInt",parseInt("1.1")) // 1 console.log("parseFloat",parseFloat("11.11#")) // 11.11 //es6写法 console.log("parseInt",Number.parseInt("1.1")) // 1 console.log("parseInt",Number.parseInt("klivitam")) // NaN console.log("parseFloat",Number.parseFloat("11")) // 11 console.log("parseFloat",Number.parseFloat("klivitam")) // NaN 复制代码
isInteger方法比较简单,就是判断类型是否为int类型。但是这里有一点东西,在javascript中,整数和浮点数采用的是同样的储存方法,所以 25 和 25.0 被视为同一个值。并且存在这么一种情况那就是如果精度太小的情况下,会被默认看做0,会返回true
console.log("Integer",Number.isInteger(25)) // true console.log("Integer",Number.isInteger(25.0)) // true console.log("Integer",Number.isInteger(25.00)) // true console.log("Integer",Number.isInteger(25.1)) // false console.log("Integer",Number.isInteger("25")) // false console.log("Integer",Number.isInteger(null)) // false console.log("Integer",Number.isInteger()) // false // 如果数值的精度超过53 个二进制位,第54位及后面的位就会被丢弃,这种情况下,Number.isInteger可能会误判。 console.log("Integer",Number.isInteger(5E-324)) // false console.log("Integer",Number.isInteger(5E-325)) // true 复制代码
es6中定义了三个常量:EPSILON、MAX_SAFE_INTEGER、MIN_SAFE_INTEGER。分别代表的是最小的常量值、最大的整数常量值、最小的整数常量值。并且es6还提供isSafeInteger方法来检测是否处于MIN_SAFE_INTEGER、MAX_SAFE_INTEGER区间内
console.log("common",Number.EPSILON) // 2.220446049250313e-16 console.log("common",Number.MAX_SAFE_INTEGER) // 9007199254740991 2^53-1 console.log("common",Number.MIN_SAFE_INTEGER) // 9007199254740991 -2^53+1 console.log("SafeInteger",Number.isSafeInteger(Number.MAX_SAFE_INTEGER+1)) // false console.log("SafeInteger",Number.isSafeInteger(Number.MIN_SAFE_INTEGER-1)) // false console.log("SafeInteger",Number.isSafeInteger(Number.MIN_SAFE_INTEGER)) // true console.log("SafeInteger",Number.isSafeInteger(Number.MIN_SAFE_INTEGER)) // true 复制代码
###三、Math 首先关于es5,我差不多整理了一下所有math方法的用处:
至于前面的那些方法,我就多做赘述了,大家差不多也能看懂,我就直接来讲es6中新增的方法: ####3-1、trunc 该方法会只取整数部分,去掉小数部分。对于不是整数的数据,内部会先用Numer转成整数进行处理,如果强转整数失败则返回NaN。
{ /* Math */ // trunc:取整运算 console.log("trunc",Math.trunc(4.2)) // 4 console.log("trunc",Math.trunc(-4.2)) // -4 console.log("trunc",Math.trunc(-0.234)) // 0 //非整数,先转化为整数,再取整 console.log("trunc",Math.trunc("-4.2")) // -4 console.log("trunc",Math.trunc(true)) //1 console.log("trunc",Math.trunc(false)) // 0 console.log("trunc",Math.trunc(null)) // 0 // 无法取整的,直接返回NaN console.log("trunc",Math.trunc(NaN)); // NaN console.log("trunc",Math.trunc('klivitam')); // NaN } 复制代码
sign
该方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。对于整数返回+1、负数返回-1、0返回0、-0返回-0、其他返回NaN。
{ // sign:判断正负 console.log("sign",Math.sign(10)) // 1 console.log("sign",Math.sign(-10)) // -1 console.log("sign",Math.sign(0)) // 0 console.log("sign",Math.sign(-0)) // 0 console.log("sign",Math.sign('')) // 0 console.log("sign",Math.sign(true)) // 1 console.log("sign",Math.sign(false)) // 0 console.log("sign",Math.sign(null)) // 0 console.log("sign",Math.sign('9')) // 1 console.log("sign",Math.sign('foo')) // NaN console.log("sign",Math.sign()) // NaN console.log("sign",Math.sign(undefined)) // NaN } 复制代码
cbrt
该方法用来计算一个值的立方根
{ // cbrt:计算一个值的立方根 console.log("cbrt",Math.cbrt(8)) // 2 console.log("cbrt",Math.cbrt(-1)) // -1 console.log("cbrt",Math.cbrt("-27")) // -3 console.log("cbrt",Math.cbrt("klivitam")) // NaN console.log("cbrt",Math.cbrt(NaN)) // NaN console.log("cbrt",Math.cbrt(null)) // 0 console.log("cbrt",Math.cbrt(undefined)) // NaN console.log("cbrt",Math.cbrt(Infinity)) // Infinity } 复制代码
####clz32 JavaScript 的整数使用 32 位二进制形式表示,Math.clz32方法返回一个数的 32 位无符号整数形式有多少个前导 0。
{ // clz32:JavaScript 的整数使用 32 位二进制形式表示 console.log("clz32",Math.clz32(0)) // 32 console.log("clz32",Math.clz32(1)) // 31 console.log("clz32",Math.clz32(1000)) // 22 console.log("clz32",Math.clz32(0b01000000000000000000000000000000)) // 1 console.log("clz32",Math.clz32(0b00100000000000000000000000000000)) // 2 console.log("clz32",Math.clz32(2)) // 30 console.log("clz32",Math.clz32(2 << 1)) // 29 console.log("clz32",Math.clz32(2 << 2)) // 28 // 小数只考虑整数部分 console.log("clz32",Math.clz32(5.6)) // 29 console.log("clz32",Math.clz32(4.2)) // 29 // 非整数先转化成整数,在... console.log("clz32",Math.clz32()) // 32 console.log("clz32",Math.clz32(NaN)) // 32 console.log("clz32",Math.clz32(Infinity)) // 32 console.log("clz32",Math.clz32(null)) // 32 console.log("clz32",Math.clz32('foo')) // 32 console.log("clz32",Math.clz32([])) // 32 console.log("clz32",Math.clz32({})) // 32 console.log("clz32",Math.clz32(true)) // 31 } 复制代码
####Math.fround() 该方法返回一个数的32位单精度浮点数形式。注意这个的返回-2^24 至 2^24 之间的整数。它的主要作用是将64位双精度转化成单精度浮点数(虽然没用过)。
Math.fround(0) // 0 Math.fround(1) // 1 Math.fround(2 ** 24 - 1) // 16777215 Math.fround(2 ** 24) // 16777216 Math.fround(2 ** 24 + 1) // 16777216 复制代码
####Math.hypot 求所有参数的平方和的平方根。如果其中有一个值不能转化成Number就会返回NaN。
Math.hypot(3, 4); // 5 Math.hypot(3, 4, 5); // 7.0710678118654755 Math.hypot(); // 0 Math.hypot(NaN); // NaN Math.hypot(3, 4, 'foo'); // NaN Math.hypot(3, 4, '5'); // 7.0710678118654755 Math.hypot(-3); // 3 复制代码
####对数运算符
- Math.expm1:意思就是e^x-1
- Math.log1p:意思就是log(x+1)
- Math.log10:返回以 10 为底的x的对数。如果x小于 0,则返回 NaN。
- Math.log2:返回以 2 为底的x的对数。如果x小于 0,则返回 NaN。
双曲函数方法
- 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) ####指数运算符 es6中新增加了**运算符,和es5的pow运算符作用差不太多。
{ // ** 指数运算符 console.log("指数",2**3) //8 console.log("指数",Math.pow(2,3)) // 8 // 当然这个也可以加入运算中 let a= 2; a **= 4; console.log("指数",a) // 16 } 复制代码
##八、说在最后 本来一直想把基本的扩展都讲完的,无奈时间也差不多到点了,所幸明天就到周五了。在这周末我一定会将所有的es6总结清楚。当然我这个代码也会在整理的差不多之后传到github供大家查阅。同时我这代码肯定有参考阮一峰大大的文章,如果存在疑虑额,请参考ECMAScript 6 入门。老规矩,12点洗澡去了。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 你了解HTTPS,但你可能不了解X.509
- 你真的了解Mybatis的${}和#{}吗?是否了解应用场景?
- 你所了解的 array_diff_uassoc 真的是你了解的那样吗?
- 图文了解 Kubernetes
- 深入了解 JSONP
- 一文了解 Kubernetes
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
勇敢新世界‧互聯網罪與罰
許煜、劉細良 / CUP / 2005 / $48
我天天上網數小時,為的是要在節目裡面介紹世界的最新動態,尤其是網絡這個世界本身日新月異的變化。所以我不可能不注意到BT、共享軟件、 Wikipedia、網絡監管等各種影響政治、社會、經濟及文化的重要網絡現象。但是我發現市面上一直沒有一本內容充實全面,資料切時的中文參考書,直到這本《互聯網罪與罰》。而且,最大的驚喜是它易讀好看,簡直就像故事書。 梁文道 鳳凰衛視 《網羅天下......一起来看看 《勇敢新世界‧互聯網罪與罰》 这本书的介绍吧!