abs()
-
用途:求绝对值。
-
语法:
Math.abs(x)
-
注意:
Math.abs()
是Math
的一个静态方法,应该通过Math.abs()
调用。(Math
不是构造器) -
MDN参考:Math.abs()
-
示例:
Math.abs('-1'); // 1 Math.abs(-2); // 2 Math.abs(null); // 0 Math.abs("string"); // NaN Math.abs(); // NaN
ceil()
-
用途:返回大于等于给定数字的最小整数。
-
语法:
Math.ceil(x)
-
MDN参考:Math.ceil()
-
示例:
Math.ceil(-1.0) // -1 Math.ceil(-2.5) // -2 Math.ceil(3.5) // 4
floor()
-
用途:返回小于等于给定数字的最大整数。
-
语法:
Math.floor(x)
-
MDN参考:Math.floor()
-
示例:
Math.floor(-1.0) // -1 Math.floor(-2.5) // -3 Math.floor(3.5) // 3
round()
-
用途:返回四舍五入后的整数。
-
语法:
Math.round(x)
-
注意点:只要碰到 0.5 的情况,不管是正数还是负数,都相当于向正无穷取整
-
MDN参考:Math.round()
-
示例:
x = Math.round(20.49) // 20 x = Math.round(20.5) // 21 x = Math.round(-20.5) // -20 x = Math.round(-20.51) // -21
max()
-
用途:返回所有参数当中的最大值。
-
语法:
Math.max(value1[,value2, ...])
([,value]
的写法指此部分为非必填项) -
注意点:
如果没有参数,返回
-Infinity
;
如果有任一参数不能被转换成数值,则返回NaN
。为什么返回
-Infinity
而不是Infinity
?当多个数组进行比较时,当其中一个数组比较后得出
-Infinity
,可以继续用Math.max()
与其他结果比较:const arr1 = [] const arr2 = [2,1,4] let max1 = Math.max(...arr1) // -Infinity let max2 = Math.max(...arr2) // 4 console.log(Math.max(max1, max2)) // 4
-
MDN参考:Math.max()
-
示例:
Math.max(1, 4, 2, 8, 5, 7) // 8 Math.max(...[1, 4, 2, 8, 5, 7]) // 8
min()
-
用途:返回所有参数当中的最小值。
-
语法:
Math.min([value1[,value2, ...]])
-
注意:如果没有参数,返回
Infinity
;如果有任一参数不能被转换为数值,则返回NaN
。为什么返回-Infinity
而不是Infinity
? 与上面Math.max
同理 -
MDN参考:Math.min()
-
示例:
Math.min(1, 4, 2, 8, 5, 7) // 1 Math.min(...[1, 4, 2, 8, 5, 7]) // 1
pow()
- 用途:返回基数的指数次幂。
- 语法:
Math.pow(base, exponent)
- MDN参考:Math.pow
- 示例:
Math.pow(2, 7) // 128
random()
- 用途:生成从0到小于1的伪随机数,不包括 1,
[0, 1)
。 - 语法:
Math.random()
- 注意点:
-
虽然是伪随机数,但是
Math.random()
的分布仍然是均匀分布,如果进行Math.random() * Math.random()
会导致不均匀分布
-
Math.random()
函数返回一个浮点数, 伪随机数在范围(0, 1)
, 其生成的不能提供像密码一样安全的随机数字(黑客可以计算出客户端生成的的随机数)。
不要使用它们来处理有关安全的事情。
使用Web Crypto API 来代替, 和更精确的window.crypto.getRandomValues() 方法。建议使用加密强伪随机数生成器:
// crypto需要考虑浏览器兼容 const crypto = window.crypto || window.webkitCrypto || window.mozCrypto || window.oCrypto || window.msCrypto; crypto.getRandomValues(new Uint32Array(1));
Crypto.getRandomValues()
方法让你可以获取符合密码学要求的安全的随机值。
传入参数的数组被随机值填充(在加密意义上的随机)。
-
MDN参考:Math.random()
-
示例:
ex. 得到一个大于等于0,小于1之间的随机数:
[0, 1)
function getRandom() { return Math.random(); }
ex. 得到一个两数之间的随机数:
[min, max)
function getRandomArbitrary(min, max) { return Math.random() * (max - min) + min; }
ex. 得到
[min,max] (min,max) (min,max]
范围内的随机数//取得[min,max]范围内随机数 function fullClose(min, max){ // [min, max + 1) let result = Math.random() * (max + 0.01 - min) + min; while(result > max){ result = Math.random() * (max + 0.01 - min) + min; } return result; } function fullClose(n,m){ let result = Math.random()*(m+1-n)+n; while(result>m){ result = Math.random()*(m+1-n)+n; } return result; } //取得(min,max)范围随机数 function fullOpen(min, max){ // [min, max) let result = Math.random() * (max - min) + min; while(result == min){ result = Math.random() * (max - min) + min; } return result; } //取得(min,max]范围随机数 function leftOpen(min, max){ // [min, max + 0.01) let result = Math.random() * (max + 0.01 - min) + min; while(result > max || result == min) { result = Math.random() * (max + 0.01 - min) + min; } return result; } // 下方方法貌似不对 function leftOpen(min, max){ // [min - 1, min - 1 + (max + 1 - min)) ==> [min - 1, max) let result = Math.random() * (max + 1 - min) + min - 1; while(result < min) { result = Math.random() * (max + 1 - min) + min - 1; } return result; }
ex. 得到一个两数之间的随机整数:
[min(int), max(int))
function getRandomInt(min, max) { min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min)) + min; //不含最大值,含最小值 }
也许很容易想到用
Math.round()
来实现,但是这会导致你的随机数处于一个不均匀的分布,这可能不符合你的需求。ex. 得到一个两数之间的随机整数,包括两个数在内:
[min(int), max(int)]
function getRandomIntInclusive(min, max) { min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min + 1)) + min; //含最大值,含最小值 }
参考文章:
JavaScript 内置对象 Math 的常用方法
Math.random() 二三事
不要再使用Math.random()生成随机数