小知识,大挑战!本文正在参与「程序员必备小知识」创作活动
Math 是一个内置对象,它拥有一些数学常数属性和数学函数方法。Math 不是一个函数对象。
Math 用于 Number 类型。它不支持 BigInt。
与其他全局对象不同的是,Math 不是一个构造器。Math 的所有属性与方法都是静态的。引用圆周率的写法是 Math.PI,调用正余弦函数的写法是 Math.sin(x),x 是要传入的参数。
Math 的常量是使用 JavaScript 中的全精度浮点数来定义的。
常用属性
- Math.PI 圆周率,一个圆的周长和直径之比,约等于 3.14159。
常用方法
需要注意的是,很多 Math 函数都有一个精度,而且这个精度在不同实现中也是不相同的。这意味着不同的浏览器会给出不同的结果,甚至,在不同的系统或架构下,相同的 JS 引擎也会给出不同的结果!
-
Math.abs(x) 返回一个数的绝对值。
-
Math.round(x) 返回四舍五入后的整数。
-
Math.abs(x) 返回一个数的绝对值。
// JS-笔试题 数组元素位置循环左右移动
function move(arr, n) {
// TODO
if ( Math.abs(n) > arr.length ) { n = n % arr.length } return arr.slice(-n).concat(arr.slice(0,-n))
return newArr;
}
var arr = [0, 1, 2, 3, 4, 5];
console.log(move(arr, -2)); // [2, 3, 4, 5, 0, 1]
console.log(move(arr, -1)); // [1, 2, 3, 4, 5, 0]
console.log(move(arr, 1)); // [5, 0, 1, 2, 3, 4]
console.log(move(arr, 2)); // [4, 5, 0, 1, 2, 3]
console.log(move(arr, 3)); // [3, 4, 5, 0, 1, 2]\
-
Math.ceil(x) 返回大于一个数的最小整数,即一个数向上取整后的值。
-
Math.floor(x) 返回小于一个数的最大整数,即一个数向下取整后的值。
// JS笔试 - 有重复数字的升序数组的二分查找
// 用二分法查找在数组中查找指定元素
// 最后返回索引
var arr = [11, 22, 33, 44, 55, 66, 77, 88, 99];
function search(arr, target) {
function _search(arr, target, start, end) {
let mid = Math.floor(start + (end - start) / 2);
if (target === arr[mid]) {
return mid;
} else if (target > arr[mid]) {
return _search(arr, target, mid + 1, end)
} else if (target < arr[mid]) {
return _search(arr, target, 0, mid)
}
return -1;
}
return _search(arr, target, 0, arr.length)
}
console.log(search(arr, 55)) // 4
console.log(search(arr, 77)) // 6
-
Math.trunc(x) 返回一个数的整数部分,直接去除其小数点及之后的部分。
-
Math.fround(x) 返回最接近一个数的单精度浮点型表示。
-
Math.max([x[, y[, …]]]) 返回零到多个数值中最大值。
-
Math.min([x[, y[, …]]]) 返回零到多个数值中最小值。
-
Math.random() 返回一个 0 到 1 之间的伪随机数。
使用举例:
// JS笔试 实现数组的随机排序
function random(arr) {
return arr.sort(function () {
return Math.random() - 0.5;
});
}
const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
console.log(random(arr));// (随机排序的数组)