ECMAScript 6(10)——数字的扩展(2)Math对象的扩展
来源:互联网 发布:制作图片软件 编辑:程序博客网 时间:2024/06/10 22:21
数字的扩展(1)Number对象的扩展请参考上一篇文章
4、Math对象的扩展
4.1、去掉小数部分的Math.trunc()
Math.trunc(变量)
简单来说,如果不是number类型,或者不能隐式转换成number类型,则返回NaN;
如果可以被转化为number类型,则转换为number类型后,省略掉小数部分并返回number类型的值;
Math.trunc(1); //1Math.trunc(1.9); //1Math.trunc(-10.9); //-10Math.trunc(-0); //-0,注意会保留负号Math.trunc('-10.9'); //-10,可以识别字符串Math.trunc(0o10); //8,可以正常识别二进制、八进制和十六进制数字var obj = {};obj.toString = function () { return '+2.9';}Math.trunc(obj); //2,对于对象通过toString隐式转换,不会保留+号(但会保留减号)Math.trunc('a10'); //NaN,不能被隐式转换为numberMath.trunc([1, 2]); //NaN,也不能Math.trunc({}); //NaN,显然也不能
4.2、判定变量的正负Math.sign()
Math.sign(变量)
五种情况:
- 正数返回+1;
- 负数返回-1;
- 正0返回0;
- 负0返回-0;
- 其他返回NaN;
参数会被隐式转换为number类型再判断。示例:
Math.sign(0); //0Math.sign(-0); //-0Math.sign(100.1234); //1Math.sign(-100.1234); //-1Math.sign(Number.MIN_VALUE); //1Math.sign(Number.MIN_VALUE / 2); //0,这个是因为已经是最小的数字了,再除以在存储的时候和0一样,于是就变成0了var obj = {};obj.toString = function () { return '+2.9';}Math.sign(obj); //1,说明是被隐式转换过的Math.sign('a10'); //NaN,不能被隐式转换为numberMath.sign([1, 2]); //NaN,也不能Math.sign({}); //NaN,显然也不能
4.3、开立方Math.cbrt()
Math.cbrt(变量)
简单来说,求变量的开立方根结果。例如数字8开立方根的结果是2。
另外提一句,开平方根是Math.sqrt();
变量会被隐式转换后再计算,不符合要求的输入内容会返回NaN。
Math.cbrt(1); //1Math.cbrt(8): //2Math.cbrt(-8); //-2Math.cbrt(0); //0var obj = {};obj.toString = function () { return '8';}Math.cbrt(obj); //2,说明会被隐式转换Math.cbrt({}); //NaN
4.4、返回一个整数二进制开头的0的数量Math.clz32()
Math.clz32()
首先,在位计算相关的函数里,只支持32位整型数的计算(见3.5,更多请谷歌百度);
其次,这个函数只对32位整型数生效;
第三,忽视小数部分;
第四,当一个32位整型数被存储时,他只会占用0~32位,而这个函数将返回未被占用的二进制的byte的数量;
第五,对于超过32位整型数的数字,固定返回32;
第六,会隐式转换为number来处理,对于依然不合法输入,返回32;
第七,左移<< 和 右移>> 位计算符,可以直接影响结果(毕竟会多占或少占一位);
第八,负数固定返回0.
Math.clz32(0); //32Math.clz32(-0); //32Math.clz32(-1); //0Math.clz32(1); //31Math.clz32(1<<1); //30Math.clz32(4); //29Math.clz32(4>>1); //30Math.clz32(Math.pow(2,32)-1); //0Math.clz32(Math.pow(2,32)); //32Math.clz32({}); //32Math.clz32('5'); //29
4.5、Math.imul()
Math.imul(变量1, 变量2)
按照说明:
两个数相乘,得到一个数,然后返回结果的32位整型数的部分。
alert:实际结果与预想不符,
如按 MDN 给的polyfill函数的运行结果,与chrome中的Math.imul()的运行结果不同;
差异如代码:
imul(0x7ffff,0x7ffff); //8588886017Math.imul(0x7ffff,0x7ffff); //-1048575524287*524287; //274876858369,但这个的值大于2的32次方-1
4.6、返回单精度浮点数Math.fround
Math.fround(变量)
4.7、返回参数平方和的平方根
Math.hypot(arguments)
参数可能存在多个;
简单来说就是每个参数先自乘获得平方,然后再将结果的和相加,然后开方即可。
注意和Math.sqrt()的结果可能所有差异(主要是因为精度问题)
Math.hypot(1); //1Math.hypot(1,2); //2.23606797749979Math.hypot(1,2,3); //3.741657386773941Math.sqrt(1 +4+9); //3.7416573867739413Math.hypot(1,2,-3) === Math.hypot(1,2,3); //true
4.8、增加了一些对数方法
略略略
Math.expm1(x)
返回ex - 1,即Math.exp(x) - 1
Math.log1p()
返回1 + x的自然对数,即Math.log(1 + x)。如果x小于-1,返回NaN。
Math.log10()
返回以10为底的x的对数。如果x小于0,则返回NaN。
Math.log2()
返回以2为底的x的对数。如果x小于0,则返回NaN
4.9、增加了一些三角函数的方法
略略略
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)
4.10、指数运算符**
**
注,就是2个乘号连一起
简单来说:
2**3 === Math.pow(2, 3); //true5**7 === Math.pow(5, 7); //true
- ECMAScript 6(10)——数字的扩展(2)Math对象的扩展
- ECMAScript 6(9)——数字的扩展(1)Number对象的扩展和探讨
- ECMAScript 6(8)——正则表达式的扩展
- ECMAScript 6(11)——数组的扩展
- ECMAScript 6(15)对象的扩展(1)——简写、属性名拼接、name
- ECMAScript 6 学习笔记----对象的扩展
- ECMAScript 6(13)函数的扩展(2)——...运算符
- ECMAScript 6 入门学习(3.字符串的扩展)
- ECMAScript 6 入门学习(4.正则的扩展)
- ECMAScript 6 入门学习(5.数值的扩展)
- ECMAScript 6 入门学习(6.函数的扩展)
- ECMAScript 6 入门学习(7.数组的扩展)
- ECMAScript 6 学习笔记----字符串的扩展
- ECMAScript 6 学习笔记----数组的扩展
- ECMAScript 6 学习笔记----函数的扩展
- ECMAScript 6(12)函数的扩展(1)——函数参数的默认值之详细解析
- ES6-数值的扩展-Math对象的扩展
- Math 对象es6上面的扩展
- C++中的拷贝构造函数
- 欢迎使用CSDN-markdown编辑器
- 树形数据结构
- GitHub使用
- 关于宏定义的注意点
- ECMAScript 6(10)——数字的扩展(2)Math对象的扩展
- 在安卓上部署服务器
- [leetcode]: 557. Reverse Words in a String III
- codeforces B. Mike and strings 暴力+字符串
- MySQL服务无法启动,服务没有报告任何错误 的解决办法
- 第6章 贯彻执行
- 基于Redis Sentinel主从切换以及Sharding分片的Redis集群高可用方案
- Eclipse高版本无法兼容FatJar的问题解决
- Unity Android 发布配置