day20
一、ES5严格模式
ES5提出严格模式,能让代码更规范,分为全局和局部。 进入严格模式语法:'use strict'
规则:①声明变量时必须使用var,不然会报错。 ②函数参数不能有重复的名称 ③函数名称+括号调用函数,this无法指向全局对象window,会输出undefined ④不允许动态的修改arguments的值 ⑤废弃了arguments。callee()方法。
二、Date对象
// 一、创建日期对象// Date内置日期对象,所谓的内置对象就是js默认提供的好的对象,让你可以直接使用的,不需要自定义// var d = new Date()// 根据当前的日期对象,对应获取到年、月、日、小时、分钟、秒、毫秒等等信息 // 二、获取年// console.log(d.getFullYear())// 三、获取月// 注意点:默认是从0开始的,所以需要手动+1// console.log(d.getMonth()+1)// 四、获取周// console.log(d.getDay())// 五、获取日// console.log(d.getDate()) // 六、获取小时// console.log(d.getHours())// 七、获取分钟// console.log(d.getMinutes())// 八、获取秒// console.log(d.getSeconds())// 九、获取毫秒// console.log(d.getMilliseconds()) // 十、时间戳:指的是从1970年1月1日零时到现在经过的毫秒数// console.log(d.getTime()) // 设置日期// 复杂设置方法// d.setFullYear(2025)// console.log(d) // 简单设置方法// var d = new Date('2025/10/01 12:30:00')// var d = new Date('2025-10-01 12:30:00')// console.log(d)
三、定时器
/*setInterval()+ 定时器=> 就是随着时间的变化,可以不断输出逻辑代码+ 参数=> 参数1是一个函数=> 参数2表示的是时间+ 定时器的时间是以毫秒来计算的=> 1秒 == 1000毫秒clearInterval()+ 清除定时器+ 定时器有一个返回值,返回值是定时器的序号或者称之为唯一的id+ 参数=> 定时器的序号+ 注意点=> 定时器的序号默认是从1开始的没有任何问题=> 浏览器安装了插件,有些插件需要执行一些定时任务,默认开启了定时器。所以咱们打印出来的序号不是从1开始的*/ // var i = 0// setInterval(function(){// i++// console.log(i)// }, 1000) // var start = document.querySelectorAll('button')[0]// var end = document.querySelectorAll('button')[1] // var box = document.querySelector('div') // var heigth = 1// setInterval(function(){// heigth += 20// box.style.height = heigth + 'px'// }, 30) // var heigth = 0// var timer = null// start.onclick = function(){// timer = setInterval(function(){// heigth += 20// box.style.height = heigth + 'px'// }, 30)// console.log(timer)// }// end.onclick = function(){// clearInterval(timer)// } var i = 0fn()function fn(){i++console.log(i)}setInterval(fn, 1000)
四、定时器累加
+ 问题:=> 当你连续多次点击按钮的时候,大家发现代码执行速度越来越快,并且点击关闭定时器按钮失效,这种问题就是累加=> 当你点击关闭按钮时,实际上关闭的是最后一次的定时器,但是前面开启的定时器还在不断的执行中+ 原因=> 当你连续多次点击按钮的时候,点击一次开启一次定时器,多次点击就开启了很多的定时器,就会形成累加=> 本来1秒钟输出1次结果,现在1秒钟输出多次结果,因此看到的速度越来越快=> 例如:打印文件-> 时间为1秒钟,让你1秒钟打印1一份文件,看到的速度是正常的-> 时间还是1秒钟,但是让你打印10份文件,时间不变,速度越来越快+ 解决方案=> 先清除,再开启
五、抢购倒计时
// 获取元素var h1 = document.querySelector('h1') // 抢购倒计时的思路:使用将来的时间 - 现在的时间 = 剩余的时间 // 第一步:先设置将来的时间var endDate = new Date('2024/11/11 00:00:00') // 问题:定时器需要等待1秒后,再去调用执行,所以页面会出现1秒钟的空白的现象// 解决方案:在已进入页面的时候就先调用一次定时器djs() setInterval(djs, 1000) function djs(){// 第二步:获取当前的时间,当前时间必须动态的获取,使用定时器1秒钟获取一次当前的时间var nowDate = new Date()// 第三步:求出总的秒数,使用时间戳来计算var seconds = parseInt((endDate.getTime() - nowDate.getTime())/1000)// 第四步:如果总的秒数为0的话,那么说明开启抢购if(seconds<=0){alert('开启抢购!')return}// 第五步:进行日期转换 // 函数调用var d = patchFn(parseInt(seconds/3600/24))var h = patchFn(parseInt(seconds/3600%24))var m = patchFn(parseInt(seconds/60%60))var s = patchFn(parseInt(seconds%60)) // 第七步:进行赋值操作h1.innerHTML = '距离开始抢购还剩'+d+'天'+h+'小时'+m+'分钟'+s+'秒'}// 第六步:补位操作// 进行补位操作代码封装function patchFn(num){return num<10 ? num = '0' + num : num}
六、Math对象
// Math是内置数学对象// πconsole.log(Math.PI)// 绝对值console.log(Math.abs(-9))// 四舍五入console.log(Math.round(5.4))console.log(Math.round(5.5))console.log(Math.round(5.6))// 向上取整console.log(Math.ceil(10.1))console.log(Math.ceil(10.2))console.log(Math.ceil(10.9))// 向下取整console.log(Math.floor(9.9))console.log(Math.floor(9.1))// 开根号console.log(Math.sqrt(9))// 幂数(次方)console.log(Math.pow(2, 2))console.log(Math.pow(2, 3))console.log(Math.pow(2, 4))// 求最大值console.log(Math.max(10, 20))// 求最小值console.log(Math.min(30, 20)) // 扩展:可以把数组里面最大值和最新值取出来var arr = [10, 20, 30]// 参数1表示改变某个对象的this指向,数组不需要修改,因此使用null占位即可// 参数2表示当前求最大值和最小值的数组console.log(Math.max.apply(null, arr))console.log(Math.min.apply(null, arr))
七、随机数
随机数是指0-1之间的随机数,取1的概率很小。
随机数公式:通过这个公式取范围 random = Math.random()*(max-min)+min
八、可以直接获取的标记
window 窗口(最大的对象) document 网页 document.documentELement html标记 document.body body标记 document.head head标记 document.title
九、延时器
setTimeout() 延时器 => 时间到了,只执行一次 => 定时💣
参数 => 参数1是一个函数 => 参数2表示的是时间
延时器的时间是以毫秒来计算的 => 1秒 = 1000毫秒
clearTimeout() 清除延时器 返回值,返回值是延时器的序号或者称之为唯一的id 参数 => 延时器的序号 注意点 => 延时器的序号默认是从1开始的没有任何问题 => 浏览器安装了插件,有些插件需要执行一些定时任务,默认开启了延时器。所以咱们打印出来的序号不是从1开始的