Math对象
1.概念:
Math对象用于执行数学任务。
2.属性:
1. E表示算数常量e
2.LNn表示以e为底n的对数
3.LOGnE表示以n为底E的对数
4.PI圆周率Π
5.SQRTn获得n的平方根
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Math</title>
</head>
<body>
<script language="javascript">
window.onload = function(){
document.write(Math.E,"<br/>");//算数常量e
document.writeln(Math.PI,"<br/>");//圆周率Π
document.writeln(Math.LN2,"<br/>");//以e为底2的对数
document.writeln(Math.LN10,"<br/>");//以e为底10的对数
document.writeln(Math.LN3,"<br/>");//像是LN2/LN10除外的以e为底的对数都是没有被定义的,会返回undefined
document.writeln(Math.LOG2E,"<br/>");//返回以2为底e的对数
document.writeln(Math.LOG10E,"<br/>");//返回以10为底e的对数
document.writeln(Math.SQRT1_2,"<br/>");//2平方根的倒数
document.writeln(Math.SQRT2,"<br/>");///1/2的平方根
}
</script>
</body>
</html>
注意,像是LN3这种没有被定义的属性都是获取不到的,会返回undefined
结果如左所示
3.Math方法:
1.sin(x)获得正弦值
2.cos(x)获得余弦值
3.tan(x)获得正切值
4.acos(x)获得反余弦值
5.asin(x)获得反正弦值
6.atan(x)获得反正切值(介于-Π/2到Π/2)
7.atan2(y,x)获取(x,y)与x轴正方向的夹角,取值范围为[-π, π]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Math</title>
</head>
<body>
<script language="javascript">
window.onload = function(){
document.write(Math.sin(Math.PI/2),"<br/>");
document.write(Math.cos(Math.PI/2),"<br/>");
document.write(Math.tan(Math.PI/2),"<br/>");
document.write(Math.asin(1),"<br/>");
document.write(Math.acos(1),"<br/>");
document.write(Math.atan(1),"<br/>");
document.write(Math.tan(Math.atan2(-1,-1)),"<br/>");
}
</script>
</body>
</html>
结果如左所示
如上述代码,
sin(x)举例中选取了Π/2,可知为1,与浏览器中显示的一致
cos(x)举例的Π/2虽然算出来应该是0,由于计算机浮点数精度问题会略微偏离0,结果的6.123233995736766e-17是科学计数法,大小差不多是6*10^-17这样的数十分接近0
tan(x)的横坐标范围应该不包含Π/2,但是使用了Π/2还是会有输出,输出一个很大的值
asin(x)实际上就是arcsin(x),也可看成siny = x,此时x带入1,获得的y就是Π/2
acos(1)同理就是0,atan(1)就是Π/4
最后一个atan2(y,x)表示(x,y)到x坐标轴正方向的角度,这里选取(-1,-1)表示角度为Π/2+Π/4
那么为了更清晰表示,这里使用tan(x)包裹了这个方法,tan(Π/2+Π/4) = tan(Π/4)即输出1
1.abs(x)返回绝对值
2.ceil(x)进行上舍入
3.floor(x)进行下舍入
4.exp(x)返回e的x次方
5.log(x)e为底的x对数
6.pow(x,y)返回x的y次幂
7.round(x)四舍五入
8.sqrt(x)x的平方根
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Math</title>
</head>
<body>
<script language="javascript">
window.onload = function(){
document.write(Math.abs(-1),"<br/>");
document.write(Math.abs(-1.20),"<br/>");
document.write(Math.ceil(2.2),"<br/>");
document.write(Math.ceil(2),"<br/>");
document.write(Math.floor(2),"<br/>");
document.write(Math.floor(2.2),"<br/>");
document.write(Math.exp(0),"<br/>");
document.write(Math.log(Math.E),"<br/>");
document.write(Math.pow(Math.E,0),"<br/>");
document.write(Math.round(5.5),"<br/>");
document.write(Math.sqrt(2),"<br/>");
document.write(Math.sqrt(-2),"<br/>");
}
</script>
</body>
</html>
结果如左图所示
需要注意的是负数的平方根是虚数,但是返回的是NaN,所以可见Math.sqrt(x)函数不支持直接处理虚数。
1.max(x,y)获得x和y的最大值
2.min(x,y)获得x和y的最小值
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Math</title>
</head>
<body>
<script language="javascript">
window.onload = function(){
document.write(Math.max(1,-1),"<br/>");
document.write(Math.min(1,-1),"<br/>");
}
</script>
</body>
</html>
结果如左所示
random()返回0到1的随机值
random()*100返回0到100的随机值
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Math</title>
</head>
<body>
<script language="javascript">
window.onload = function(){
document.write(Math.random(),"<br/>");
}
</script>
</body>
</html>
这里不需要写其他语句进行生成随机数种子等操作,只需要直接写下random就可以进行随机数,而且每次随机数都不同
4.math对象的使用例子:
写一段生成0到100的随机数,然后与用户猜的数比较大小,如果猜的数过大,则返回输入过大提示语,过小就提示过小,并且修改原来的提示文案。
运行结果如上图,代码如下
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Math</title>
</head>
<body>
<script language="javascript">
window.onload = function(){
var max = document.getElementById("max");//获得id为max的标签
var min = document.getElementById("min");//获得id为min的标签
max.innerHTML = "100";//初始化max
min.innerHTML = "0";//初始化min
var num = Math.ceil(Math.random()*100);//生成0到100的值
var btn = document.getElementById("btn");//获取btn标签
var content = document.getElementById("content");//获取content标签
var lab = document.getElementById("text");//获取text提示语标签
btn.onclick=function(){//按钮被点击
var val = content.value;//获取输入值
if(val>num){
lab.innerHTML = "猜大了";
max.innerHTML = val;
}
else if(val==num){
lab.innerHTML = "猜对了";
}
else{
lab.innerHTML = "猜小了";
min.innerHTML = val;
}
}
}
</script>
请从<label id="max"></label>到<label id="min"></label>中选一值
请输入猜测的数值:<input type="text" id="content">
<input type="button" value="确认" id="btn">
<label id="text"></label>
</body>
</html>
这段代码的大致思想是:
创建上下两个提示语,一个提示范围,一个提示输入太大了还是太小了,lable值的修改使用innerHTML,上面写的JavaScript代码window.onload = function()是页面加载后运行,btn.οnclick=function()表示按钮按下运行,Math.ceil(Math.random()*100);//生成0到100的值生成0到100,ceil是为了避免出现小数,然后再在function中进行比较,并修改提示语
这段代码可以继续添加比较输入的数比以往输入的最小值还要小的判断,比如之前输入40发现比较小,这一次又输入39,需要进行比较即与min使用if语句比较,如果判断比min还要小,就使用lab.innerHTML="不能比以往猜的数还小"之类的提示,并使用return;退出。
Date对象
1.创建方法:
var 变量名 = new Date();
2.Date对象方法:
getYear()返回年号,这个年号是指减去1900的值
getFullYear()返回年数
getMonth()获取月份(0~11)
getDate()返回一个月中哪一天(1~31)
getDay()返回一个信息的哪一天(0~6,其他0表示周日)
getHours()返回一天中哪一个小时(0~23)
getMinutes()返回一小时的哪一分钟(0~59)
getSeconds()返回一分钟的那一秒(0~59)
对于小时,分钟,秒数都是要加上在后面s,例如minutes,seconds,hours
除了年,日期date其他都是从0开始
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Math</title>
</head>
<body>
<script language="javascript">
window.onload = function(){
var d = new Date();
document.write("日期",d.getDate(),"<br/>");
document.write("星期",d.getDay(),"<br/>");
document.write("小时",d.getHours(),"<br/>");
document.write("分钟",d.getMinutes(),"<br/>");
document.write("秒数",d.getSeconds(),"<br/>");
document.write("年号",d.getYear(),"<br/>");
document.write("年数",d.getFullYear(),"<br/>");
}
</script>
</body>
</html>
返回如左所示
setYear(year)设置年数
setMonth(month)设置月份
setDate(day)设置日期
setHours(hours)设置小时
setMinutes(mins)设置分钟
setSeconds(secs)设置秒数
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Math</title>
</head>
<body>
<script language="javascript">
window.onload = function(){
var d = new Date();
d.setYear(91);
document.write("日期",d.getYear(),"<br/>");
d.setYear(2024);
document.write("日期",d.getYear(),"<br/>");
}
</script>
</body>
</html>
需要注意的是setYear可以设置二位数或者四位数,二位数表示距离1900年的距离,如果是四位数就是普通的年数
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Math</title>
</head>
<body>
<script language="javascript">
window.onload = function(){
var d = new Date();
d.setMonth(15);
document.write("月份",d.getMonth(),"<br/>");
document.write("年数",d.getFullYear(),"<br/>");
}
</script>
</body>
</html>
setMonth也可以写超过11的数,最终得到的值为15-11(最高的12月序号是11)-1(从0开始计算) = 3月份,并且会对年份加一
结果如左图所示,现在的年份是2024,需要加上1为2025
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Math</title>
</head>
<body>
<script language="javascript">
window.onload = function(){
var d = new Date();
d.setDate(32);
document.write("日期",d.getDate(),"<br/>");
document.write("月份",d.getMonth(),"<br/>");
}
</script>
</body>
</html>
setDate也一样,32超过现在事件的4月份的30天,32 - 30 = 2,月份加一减一(从0开始)所以月份变为4,日期变为2
结果如左所示
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Math</title>
</head>
<body>
<script language="javascript">
window.onload = function(){
var d = new Date();
d.setHours(25);
document.write("日期",d.getDate(),"<br/>");
document.write("小时",d.getHours(),"<br/>");
}
</script>
</body>
</html>
现在日期21,小时超过25-23-1为1,日期+1为22
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Math</title>
</head>
<body>
<script language="javascript">
window.onload = function(){
var d = new Date();
d.setMinutes(61);
document.write("分钟",d.getMinutes(),"<br/>");
document.write("小时",d.getHours(),"<br/>");
}
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Math</title>
</head>
<body>
<script language="javascript">
window.onload = function(){
var d = new Date();
d.setSeconds(61);
document.write("分钟",d.getMinutes(),"<br/>");
document.write("秒数",d.getSeconds(),"<br/>");
}
</script>
</body>
</html>
尝试以上代码后,可见只要超过对应时间数,就对对其取余数,商加到上一级的时间上