ECMAScript 6(10)——数字的扩展(2)Math对象的扩展

数字的扩展(1)Number对象的扩展请参考上一篇文章

4、Math对象的扩展

4.1、去掉小数部分的Math.trunc()

Math.trunc(变量)

简单来说,如果不是number类型,或者不能隐式转换成number类型,则返回NaN;
如果可以被转化为number类型,则转换为number类型后,省略掉小数部分并返回number类型的值;

Math.trunc(1);    //1
Math.trunc(1.9);    //1
Math.trunc(-10.9);    //-10
Math.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,不能被隐式转换为number
Math.trunc([1, 2]);    //NaN,也不能
Math.trunc({});    //NaN,显然也不能
4.2、判定变量的正负Math.sign()

Math.sign(变量)

五种情况:

  1. 正数返回+1;
  2. 负数返回-1;
  3. 正0返回0;
  4. 负0返回-0;
  5. 其他返回NaN;

参数会被隐式转换为number类型再判断。示例:

Math.sign(0);    //0
Math.sign(-0);    //-0
Math.sign(100.1234);    //1
Math.sign(-100.1234);    //-1
Math.sign(Number.MIN_VALUE);    //1
Math.sign(Number.MIN_VALUE / 2);    //0,这个是因为已经是最小的数字了,再除以在存储的时候和0一样,于是就变成0了

var obj = {};
obj.toString = function () {
    return '+2.9';
}
Math.sign(obj);    //1,说明是被隐式转换过的

Math.sign('a10');    //NaN,不能被隐式转换为number
Math.sign([1, 2]);    //NaN,也不能
Math.sign({});    //NaN,显然也不能
4.3、开立方Math.cbrt()

Math.cbrt(变量)

简单来说,求变量的开立方根结果。例如数字8开立方根的结果是2。

另外提一句,开平方根是Math.sqrt();

变量会被隐式转换后再计算,不符合要求的输入内容会返回NaN。

Math.cbrt(1);    //1
Math.cbrt(8):    //2
Math.cbrt(-8);    //-2
Math.cbrt(0);    //0

var 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);    //32
Math.clz32(-0);    //32
Math.clz32(-1);    //0
Math.clz32(1);    //31
Math.clz32(1<<1);    //30
Math.clz32(4);    //29
Math.clz32(4>>1);    //30
Math.clz32(Math.pow(2,32)-1);    //0
Math.clz32(Math.pow(2,32));    //32
Math.clz32({});    //32
Math.clz32('5');    //29
4.5、Math.imul()

Math.imul(变量1, 变量2)

按照说明:

两个数相乘,得到一个数,然后返回结果的32位整型数的部分。

alert:实际结果与预想不符,

如按 MDN 给的polyfill函数的运行结果,与chrome中的Math.imul()的运行结果不同;

差异如代码:

imul(0x7ffff,0x7ffff);    //8588886017
Math.imul(0x7ffff,0x7ffff);    //-1048575
524287*524287;    //274876858369,但这个的值大于2的32次方-1
4.6、返回单精度浮点数Math.fround

Math.fround(变量)

4.7、返回参数平方和的平方根

Math.hypot(arguments)

参数可能存在多个;

简单来说就是每个参数先自乘获得平方,然后再将结果的和相加,然后开方即可。

注意和Math.sqrt()的结果可能所有差异(主要是因为精度问题)

Math.hypot(1);    //1
Math.hypot(1,2);    //2.23606797749979
Math.hypot(1,2,3);    //3.741657386773941
Math.sqrt(1 +4+9);    //3.7416573867739413
Math.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);    //true
5**7 === Math.pow(5, 7);    //true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值