JavaScript内建对象Math数学方法
Math数学运算方法
Math的属性:
E 返回算术常量 e,即自然对数的底数(约等于2.718)。
LN2 返回 2 的自然对数(约等于0.693)。
LN10 返回 10 的自然对数(约等于2.302)。
LOG2E 返回以 2 为底的 e 的对数(约等于 1.414)。
LOG10E 返回以 10 为底的 e 的对数(约等于0.434)。
PI 返回圆周率(约等于3.14159)。
SQRT1_2 返回返回 2 的平方根的倒数(约等于 0.707)。
SQRT2 返回 2 的平方根(约等于 1.414)。
Math.PI/180*60 角度转弧度
Math的方法:
abs(x) 返回数的绝对值。
acos(x) 返回数的反余弦值。
asin(x) 返回数的反正弦值。
atan(x) 以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值。
atan2(y,x) 返回从 x 轴到点 (x,y) 的角度(介于 -PI/2 与 PI/2 弧度之间)。
ceil(x) 对数进行上舍入。
cos(x) 返回数的余弦。
exp(x) 返回 e 的指数。
floor(x) 对数进行下舍入。
log(x) 返回数的自然对数(底为e)。
max(x,y) 返回 x 和 y 中的最高值。
min(x,y) 返回 x 和 y 中的最低值。
pow(x,y) 返回 x 的 y 次幂。Y填分数可以求x的y次根
random() 返回 0 ~ 1 之间的随机数。不包括0和1
round(x) 把数四舍五入为最接近的整数。只对正数部分起作用
sin(x) 返回数的正弦。
sqrt(x) 返回数的平方根。
tan(x) 返回角的正切。
console.log(Math.round(-3.6));//-4,可以看做-4+0.4,0.4四舍五入
console.log(Math.round(-3.4));//-3,可以看做-4+0.6,0.6四舍五入
案例:求数组中的最大值和最小值,并返回对象
方法一:
function getMaxMin(arr){
if(arr.length<1) return null;
var obj={
max:arr[0],
min:arr[0]
}
if(arr.length<2) return obj;
for(var i=1;i<arr.length;i++){
if(obj.max<arr[i]) obj.max=arr[i];
if(obj.min>arr[i]) obj.min=arr[i];
}
return obj;
}
var arr=[3,5,6,8,2,1,9];
var o=getMaxMin(arr);
console.log(o);
方法二:
var arr=[3,5,6,8,2,1,9]
function getMaxMin(arr){
if(arr.length<1) return null;
return {
max:Math.max(...arr),
min:Math.min(...arr)
}
}
var o=getMaxMin(arr);
console.log(o);
求数组中的最大值(最小值同理)
var arr=[3,5,6,8,2,1,9];
// var max=Math.max.apply(null,arr);//ES5中的写法
var max=Math.max(...arr);//ES6的写法,求数组中的最大值
console.log(max);
求两点之间最短距离
var point1={x:300,y:300};
var point2={x:400,y:400};
var dist=Math.sqrt(Math.pow(point2.x-point1.x,2)+Math.pow(point2.y-point1.y,2));
console.log(dist);
生成min和max之间的随机数
function random(min,max){
return Math.floor(Math.random()*(max-min)+min)
}
console.log(random(10,20));
1-100之间随机取四个数,不能有重复
方法一
乱序数组方法,数组中不会有重复的数,取4位
function getRandom(){
var arr=[];
for(var i=0;i<100;i++){
arr.push(i);
}
arr.sort(function(){
return Math.random()-0.5; //乱序数组
})
arr.length=4;
return arr;
}
方法二
indexOf查找方法,如果重复不添加
function getRandom(){
var arr=[];
while(arr.length<4){
var item=Math.floor(Math.random()*100);
if(arr.indexOf(item)<0) arr.push(item);
}
return arr;
}
console.log(getRandom());
生成0-9a-zA-Z随机验证码
function getRandom(){
var arr=[];
for(var i=48;i<123;i++){
if(i>57 && i<65) continue;
if(i>90 && i<97) continue;
arr.push(String.fromCharCode(i));
}
arr.sort(function(){
return Math.random()-0.5;
})
arr.length=4;
return arr.join("");
}
console.log(getRandom())
灰度测试
var div1=document.getElementById("div1");
div1.style.width="100px";
div1.style.height="100px";
div1.style.backgroundColor="red";
div1.onclick=function(){
div1.style.backgroundColor=getColor();
}
function getColor(){
return "#"+Array(6).fill(Math.floor(Math.random()*16).toString(16)).join("");
}
//新建一个6位空数组,arr.fill()填充相同的值,因为6位相同所以都是灰色
//转为16进制字符串+#,颜色
var arr=Array(6)
arr.fill(3,2,5)表示从下标2开始直到下标5填入相同的内容3,超出数组长度不填
如果填入的是对象,那么填入的对象引用地址相同
arr.fill({a:1});
arr[0].a=10;
console.log(arr);
更改一个属性值会更改全部的属性值,因为引用地址相同