一、Math对象
不需要创建,直接使用
1.1 PI
var pi = Math.PI
1.2 取整
var num = Math.ceil(num)
var num = Math.floor(num)
var num = Math.round(num)
- num.toFixed(d):
- d代表保留的小数位数,可以四舍五入
- 解决浏览器带来的舍入误差,2-1.6=0.3999999999999这种情况就可以使用toFixed来解决
- 结果是一个字符串
- 自己封装一个函数来实现toFixed功能:
function toFixed(num,d){
num*=(10**d)
num=Math.round(num)
num/=(10**d)
return num
}
var result=toFixed(Math.PI,2)
console.log(result)
1.3 乘方和开方
Math.pow(底数,幂); 相当于 底数**幂
Math.sqrt(num); - 仅仅只能开平方
1.4 最大值和最小值
var max/min=Math.max/min(a,b,c,d,e,f,g,...);
对于数组求最值得方法:
Math.max/min.apply(Math,arr);
<script>
var arr=[31,25,43,76,98,6234,2,4645,686,43421,5,6548,65]
console.log(Math.max(1,2,3,45,5,6,8,9,6))
console.log(Math.min(1,2,3,45,5,6,8,9,6))
console.log(Math.max.apply(Math,arr))
console.log(Math.max.apply(Math,arr))
</script>
1.5 绝对值
Math.abs(-1);
1.6 随机数
- Math.random(); 在0-1之间去一个随机的小数
- 搭配上parseInt,只能取到0,但是不可能取到1,意味着取不到最大值
- 随机数公式:parseInt(Math.random()*(max-min+1)+min)
二、Date对象
日期对象,提供了操作日期和时间的API。日期的所有API都是直接修改原日期的,无法获得修改之前的日期。
2.1 创建
- 创建一个当前日期:var now=new Date();
- 创建一个自定义时间:var birth=new Date("yyyy/MM/dd hh:mm:ss");
- 创建一个自定义时间:var birth=new Date(yyyy,MM,dd,hh,mm,ss);//修改月份,从0~11,0代表1月
- 创建一个自定义时间:var date=new Date(毫秒数);//计算机元年:1970年1月1日 8点整
- 复制一个日期:日期的所有API都是直接修改原日期的,无法获得修改之前的日期,所以,在执行API之前先进行复制,然后再操作复制后的日期
var end=new Date(start);
2.2 使用
两个日期之间相减得到的是毫秒差
2.3 Date的API
- get/setFullYear - 获取/设置当前年份的数字
- get/setMonth - 获取/设置当前月份(0-11)
- get/setDate - 获取/设置当前日期(1-31)
- getDay - 获取当前星期(0-6,0代表是星期天)(此方法没有set功能)
- get/setHours - 获取/设置当前时(0-23)
- get/setMinutes - 获取/设置当前分钟(0-59)
- get/setSeconds - 获取/设置当前秒(0-59)
- get/setMilliseconds - 获取/设置当前毫秒
- 格式化日期为本地字符串:date.toLocaleString();
- 具有兼容性问题
- 用了此方法会失去一些东西:日期的自动进制、日期的API
三、定时器
3.1 周期性定时器:
每过一段时间就会执行一次,先等后做
- 开启:timer=setInterval(callback,间隔毫秒数);
- 停止:clearInterval(timer);
3.2 一次性定时器:
等待一段时间,只会做一次就结束了
- 开启:timer=setTimeout(callback,间隔毫秒数);
- 停止:clearTimeout(timer);
四、同步和异步
- 同步技术:代码必须一行一行的执行,前面没做完,后面就等着
- 异步技术:无论我这一块代码多么的耗时,也不会卡住后续代码
五、案例
<body id = "bd">
<button>点击购买双色球</button>
<script>
var btn = document.getElementsByTagName('button')[0]
btn.onclick = function() {
var user = prompt("请输入要购买的注数:")
for (var i = 0; i < user; i++) {
var blue = parseInt(Math.random()*(16)+1)
var red = []
while(red.length < 6) {
var r = parseInt(Math.random()*(33)+1)
if(red.indexOf(r) == -1) {
red.push(r)
}
}
red.sort((a,b)=>a-b)
var section = document.createElement('section')
red.forEach(val=>{
var div = document.createElement('div')
div.innerHTML = val
div.className = 'red'
section.appendChild(div)
})
var div = document.createElement('div')
div.innerHTML = blue
div.className = 'blue'
section.appendChild(div)
bd.appendChild(section)
}
}
</script>
</body>
</html>
<script>
// 让员工自己输入自己的入职时间,计算出3年后员工的合同到期时间,前一个月人力会对员工进行续签,计算出续签时间,如果续签是周末,提前到周五,而续签前一个星期,会对员工进行提醒,计算出提醒时间
// 入职时间·
var user = prompt("请输入入职时间,格式为:yyyy/mm/dd hh:mm:ss");
// 复制一份入职时间
var entry = new Date(user);
console.log("入职时间为:"+getTime(entry));
// 获取年并且设置三年后合同到期的日期
entry.setFullYear(entry.getFullYear() + 3);
console.log("合同到期时间为:"+getTime(entry));
// 复制一份合同到期时间
var due = new Date(entry)
// 获取并且设置合同到期前一个月 续签
due.setMonth(due.getMonth() - 1)
// 复制一份提前一个月续签时间
var ren = new Date(due)
// 判断是否为周末
if(ren.getDay() == 6) {
ren.setDate(ren.getDate() - 1)
} else if (ren.getDay() == 0) {
ren.setDate(ren.getDate() - 2)
}
// 续签时间
console.log("续签时间为:"+getTime(ren));
// 提醒时间
var tx = new Date(ren)
tx.setDate(tx.getDate() - 7)
console.log("提醒时间为:"+getTime(tx));
// 格式化日期
function getTime(time) {
var year = time.getFullYear()
var month = time.getMonth() + 1
var date = time.getDate()
var h = time.getHours()
var m = time.getMinutes()
var s = time.getSeconds()
month = month<10?"0"+month:month
date = date<10?"0"+date:date
h = h<10?"0"+h:h
m = m<10?"0"+m:m
s = s<10?"0"+s:s
// 星期
var day = time.getDay()//0-6
var arr = ["天","一","二","三","四","五","六"]
return year+"年"+month+"月"+date+"日 "+"星期"+arr[day]+" "+h+"时"+m+"分"+s+"秒"
}
</script>
<div id="box"></div>
<script>
getTime()
timer = setInterval(function(){
getTime()
},1000)
function getTime() {
var time = new Date("2023/06/22 00:00:00")
var now = new Date()
var dif = time - now
var day = parseInt(dif/1000/60/60/24)
var hours = parseInt(dif/1000/60/60%24)
var min = parseInt(dif/1000/60%60)
var s = parseInt(dif/1000%60)
hours = hours<10?"0"+hours:hourse
min = min<10?"0"+min:min
s = s<10?"0"+s:s
box.innerHTML = box.innerHTML.indexOf(":") == -1?"距离端午节还有:"+day+"天"+hours+":"+min+":"+s:"距离端午节还有:"+day+"天"+hours+" "+min+" "+s
}
</script>