博文类型: 学习向
背景: 学习ES6语法并做学习笔记
目标: 跟着ES6教程实操,并记录实操结果
一、Number
1.isFinite
作用:
检查一个数值是否为有限的。
//ES6的调用方式
console.log(Number.isFinite(123.2));//true
console.log(Number.isFinite("123.2"));//false
console.log(Number.isFinite(NaN));//false
console.log(Number.isFinite(Infinity));//false
console.log(Number.isFinite(true));//false
//ES5的调用方式
console.log(isFinite(123.2));//true
console.log(isFinite("123.2"));//true
console.log(isFinite(NaN));//false
console.log(isFinite(Infinity));//false
console.log(isFinite(true));//true
解释:
ES6的Number.isFinite只会对数值进行判断,非数值一律返回false。
ES5的isFinite在判断前,会把非数值转化为数值然后再进行判断。
那么我想使ES5的这个方法的结果和ES6一样,我可以在ES5中对这个方法进行封装:
function myIsFinite(value){
return typeof value==='number'&&isFinite(value)
}
console.log(myIsFinite('123'));//false
2.isNaN
作用:
检查一个数值是否为NaN(不是一个数字not a number)。
//ES6的调用方式
console.log(Number.isNaN(NaN));//true
console.log(Number.isNaN('NaN'));//false
console.log(Number.isNaN(123));//false
console.log(Number.isNaN("123"));//false
console.log(Number.isNaN(true));//false
console.log(Number.isNaN('231'/123));//false
console.log(Number.isNaN(true/123));//false
console.log(Number.isNaN(123/0));//false
console.log(Number.isNaN('aaa'/123));//true
//ES5的调用方式
console.log(isNaN(NaN));//true
console.log(isNaN('NaN'));//true
console.log(isNaN(123));//false
console.log(isNaN("123"));//false
console.log(isNaN(true));//false
console.log(isNaN('231'/123));//false
console.log(isNaN(true/123));//false
console.log(isNaN(123/0));//false
console.log(isNaN('aaa'/123));//true
解释:
在做运算的时候会先转数字然后再运算,123/0为Infinite
ES6的Number.isNaN只会对数值进行判断,非数值一律返回false。
ES5的isNaN在判断前,会把非数值转化为数值然后再进行判断。
那么我想使ES5的这个方法的结果和ES6一样,我可以在ES5中对这个方法进行封装:
function myIsNaN(value){
return typeof value==='number'&&isNaN(value)
}
console.log(myIsNaN('123'));//false
3.parseInt
作用:
1.将开头为有效数字的字符串转化为从开头的有效数字到非数字的前一个数字的整数。
2.或者将含小数点的数字转化为整数。
//ES6的调用方式
console.log(Number.parseInt('100.111sasdasd1111'));//100
console.log(Number.parseInt(100.111));//100
//ES5的调用方式
console.log(parseInt('100.111sasdasd1111'));//100
console.log(parseInt(100.111));//100
解释:
在ES5和ES6中,该方法的作用和结果都是一样的,那为什么ES6要多此一举把parseInt放到Number中呢?目的是为了逐步减少使用全局性的方法,使得语言逐步模块化。就像是将工具箱里的螺丝刀和扳手区分开,螺丝刀放到一个名为‘螺丝刀箱子’的箱子中,扳手放到一个名为‘扳手箱子’的箱子中。
3.parseFloat
作用:
将开头为有效数字的字符串转化为从开头的有效数字到非数字的前一个数字的浮点数。
//ES6的调用方式
console.log(Number.parseFloat('100.111sasdasd1111'));//100.111
console.log(Number.parseFloat(100.111));//100.111
//ES5的调用方式
console.log(parseFloat('100.111sasdasd1111'));//100.111
console.log(parseFloat(100.111));//100.111
解释:
在ES5和ES6中,该方法的作用和结果都是一样的。
4.isInteger
作用:
判断一个值是否为整数,3和3.0都算整数
//ES6的调用方式
console.log(Number.isInteger(1.1));//false
console.log(Number.isInteger(1));//true
console.log(Number.isInteger(1.0));//true
console.log(Number.isInteger('1.1'));//false
console.log(Number.isInteger('1'));//false
console.log(Number.isInteger('aa'));//false
console.log(Number.isInteger(true));//false
想要在ES5中使用这个方法需要进行封装
function myIsInteger(value){
return typeof value==='number'&&isFinite(value)&&Math.floor(value)===value
}
console.log(myIsInteger('123'));//false
5.EPSILON
作用:
ES6在Number上设置的一个极小值,用来衡量浮点数计算是否准确。
console.log(Number.EPSILON)//2.220446049250313e-16
console.log(0.3-0.2-0.1)//-2.7755575615628914e-17
//2.7755575615628914e-17<2.220446049250313e-16则该计算在误差范围内,计算正确
6.isSafeInteger
作用:
javascript能准确表示的整数范围-9007199254740992~9007199254740992 (不包含首尾)。
解释:
ES6引入了Number.MAX_SAFE_INTERGER和Number.MIN_SAFE_INTERGER两个常量来表示这个范围的上下限。以及Number.isSafeInteger来判断一个整数是否在这个区间内。
二、Math
1.trunc
作用:
对于非数值,会先将非数值用Number方法转为数值然后返回整数部分
console.log(Math.trunc(5));//5
console.log(Math.trunc(5.2224));//5
console.log(Math.trunc("5.2244"));//5
console.log(Math.trunc("as"));//NaN
2.sign
作用:
对于非数值,会先将非数值转为数值然后判断这个数是正数(1)、负数(-1)或者零(0)。
console.log(Math.sign(5));//1
console.log(Math.sign(5.2224));//1
console.log(Math.sign(-5.2224));//-1
console.log(Math.sign(-0));//-0
console.log(Math.sign(0));//0
console.log(Math.sign(+0));//0
console.log(Math.sign("5.2244"));//1
console.log(Math.sign("as"));//NaN
3.cbrt
作用:
对于非数值,会先将非数值转为数值然后计算这个数的立方根。
console.log(Math.cbrt(5));//1.709975946676697
console.log(Math.cbrt(5.2224));//1.7349623082001575
console.log(Math.cbrt(-5.2224));//-1.7349623082001575
console.log(Math.cbrt(0));//0
console.log(Math.cbrt("5.2244"));//1.7351837569438129
console.log(Math.cbrt("as"));//NaN
4.clz32
作用:
对于非数值,会先将非数值转为数值然后将这个数值用无符号32位二进制整数表示,返回其有多少个前置0。
console.log(Math.clz32(5));//29
console.log(Math.clz32(5.2224));//29
console.log(Math.clz32(-5.2224));//0
console.log(Math.clz32(0));//32
console.log(Math.clz32("5.2244"));//29
console.log(Math.clz32("as"));//32
5.imul
作用:
返回两个数以32位带符号整数形式相乘的结果,其结果也是32为带符号整数。
解释:
为什么不能直接乘呢?因为javaScript有精度限制,超过2的53次方就不能准确表示。很大数相乘,低位数都是不准确的,Math.imul可以准确表示低位数。
console.log((2*2)|0);//4
console.log(Math.imul(2,2));//4
console.log((0x7fffffff*0x7fffffff)|0);//0
console.log(Math.imul(0x7fffffff,0x7fffffff));//1
6.fround
作用:
用来表示无法用64个二进制位精确表示的小数,返回最接近这个小数的单精度浮点数。
console.log(Math.fround(1));//1
console.log(Math.fround(1.2));//1.2000000476837158
console.log(Math.fround("2"));//2
console.log(Math.fround("sss"));//NaN
7.hypot
作用:
返回所有参数平方和的平方根
console.log(Math.hypot(3,4));//5
console.log(Math.hypot("3",4));//5
console.log(Math.hypot(3,"actions"));//NaN
8.expm1
作用:
返回e的x次方减一
console.log(Math.expm1(1));//1.718281828459045
console.log(Math.expm1(0));//0
console.log(Math.expm1(-1));//-0.6321205588285577
9.log1p
作用:
返回ln(1+x)
console.log(Math.log1p(1));//0.6931471805599453
console.log(Math.log1p(0));//0
console.log(Math.log1p(-1));//-Infinity
10.log10和log2
作用:
返回以10为底x的对数
console.log(Math.log10(1));//0
console.log(Math.log10(0));//-Infinity
console.log(Math.log10(-1));//NaN
console.log(Math.log2(1));//0
console.log(Math.log2(0));//-Infinity
console.log(Math.log2(-1));//NaN
11.双曲函数方法
Math.sinh(x )返回 的双曲正弦( hyperbolic sine)
Math cosh(x )返回 的双曲余弦( hyperbolic cosine)
Math tanh(x )返回 的双曲正切( hyperbolic tangent)
Math.asinh(x )返回 的反双曲正弦( inverse hyperbolic sine)
Math acosh(x )返回 的反双曲余弦( inverse hyperbolic cosine)
Math.atanh(x )返回 的反双曲正切( inverse hyperbolic tangent)