vue组件JS动态显示当前系统日期、星期、时间,格式
html页面:
<span>{{nowTime}}</span>
js页面
//timer用来存储定时器对象,nowTime用来存储当前时间
data() {
return {
timer: "", // 定义一个定时器
nowTime: ""
};
},
//created是Vue组件的生命周期钩子之一,在组件实例被创建之后立即调用。在这里,它调用了getTime方法。
created() {
this.getTime();
},
//这部分包含了一个名为getTime的方法,它使用setInterval方法每隔一秒更新一次时间。在每次更新时,它获取当前时间的年、月、日、小时、分钟、秒等信息,并将其格式化后赋值给nowTime。
methods: {
getTime() {
this.timer = setInterval(() => {
// 获取当前时间的各个部分
let timeDate = new Date();
let year = timeDate.getFullYear();
let mounth = timeDate.getMonth() + 1;
let day = timeDate.getDate();
let hours = timeDate.getHours();
// 格式化小时
hours = hours >= 10 ? hours : "0" + hours;
let minutes = timeDate.getMinutes();
// 格式化分钟
minutes = minutes >= 10 ? minutes : "0" + minutes;
let seconds = timeDate.getSeconds();
// 格式化秒钟
seconds = seconds >= 10 ? seconds : "0" + seconds;
let week = timeDate.getDay();
let weekArr = [
"星期日",
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六"
];
// 将获取的时间信息赋值给nowTime
this.nowTime = `${year}-${mounth}-${day} ${weekArr[week]} ${hours}:${minutes}:${seconds}`;
}, 1000); // 每隔一秒更新时间
}
},
//beforeDestroy是Vue组件的生命周期钩子之一,在组件销毁之前调用。在这里,它清除了之前设定的定时器,以避免内存泄漏。
beforeDestroy() {
if (this.timer) {
clearInterval(this.timer);
}
}
关于beforeDestory()
beforeDestroy
生命周期钩子的作用是在组件销毁之前执行一些清理工作,以避免内存泄漏和其他潜在的问题。在这个特定的代码示例中,它的作用是清除定时器,以停止定时器的运行。
当一个组件被销毁时,如果不清除定时器,定时器将继续在后台运行,即使组件不再存在。这可能会导致内存泄漏,因为定时器会持续占用系统资源。
通过在beforeDestroy
钩子中清除定时器,可以确保在组件销毁之前停止定时器的运行,并释放相关的资源。这样可以有效地防止内存泄漏问题,并提高应用程序的性能和稳定性。
总而言之beforeDestroy
钩子是在组件销毁之前执行清理操作的地方,清除定时器是其中常见的应用场景之一。
关于内存泄漏
内存泄漏是指在程序运行过程中,已经不再使用的内存没有被正确释放或回收的问题。当内存泄漏发生时,程序占用的内存会逐渐增加,最终可能导致系统崩溃或变得非常缓慢。
内存泄漏通常是由以下情况引起的:
- 对象引用无法被释放:当对象被创建后,如果仍然存在对该对象的引用,即使该对象不再使用,也无法被垃圾回收器自动回收。这可能是由于未及时解除引用、循环引用等原因导致的。
- 动态分配的内存没有被释放:在程序中使用
new
操作符动态分配内存时,如果没有及时调用相应的释放内存操作(如delete
、free
等),这块内存就会一直被占用而无法得到回收。 - 资源未被正确释放:包括文件句柄、数据库连接、网络连接等资源没有被正确关闭和释放,从而导致内存泄漏。
内存泄漏问题会导致程序性能下降,甚至引发系统崩溃。为了避免内存泄漏,开发者应该注意正确使用和管理内存资源,及时释放不再需要的对象和资源。在编程中,合理使用垃圾回收机制、避免循环引用、及时关闭文件和连接等都是预防内存泄漏的常见方法。
关于==setInterval(()=>{})==箭头函数
这段代码使用了箭头函数来定义了一个定时器。箭头函数是ES6中引入的一种新的函数定义方式,它具有更简洁的语法和改变了this的指向。
在这里,setInterval
方法创建了一个定时器,每隔一定的时间就会执行其中定义的箭头函数。箭头函数的特点是不会改变其内部的this指向,它会继承外层作用域中的this值。因此,在箭头函数中使用的this指向的是定义箭头函数的作用域中的this,而不是在定时器函数内部重新定义一个this。
这样做的好处是可以避免在定时器函数内部出现this指向混乱的情况,保持了代码的可读性和可维护性。同时也能够方便地访问外部作用域中的数据和方法。这种特性使得箭头函数在定时器、事件处理函数等场景中非常实用。
let timeDate = new Date();
·这段代码创建了一个Date
对象,并将当前的日期和时间赋值给了timeDate
变量。
Date
对象是JavaScript中表示日期和时间的内置对象。通过new Date()
可以创建一个表示当前日期和时间的Date
对象。如果需要指定特定的日期和时间,可以传递相应的参数给Date
构造函数,例如new Date('2023-11-16')
。
一旦创建了Date
对象,就可以使用其提供的方法和属性来操作和获取日期和时间的各个部分。例如,timeDate.getFullYear()
可以获取当前日期的年份,timeDate.getMonth()
可以获取当前日期的月份(注意月份是从0开始计数的,0表示一月),timeDate.getDate()
可以获取当前日期的日。
总之,new Date()
可以用于创建一个表示当前日期和时间的Date
对象,通过该对象可以进行各种日期和时间的操作和获取。
将小时数转换为两位数的格式
hours = hours >= 10 ? hours : "0" + hours;
这行代码使用了条件(三元)运算符 ?
,其基本格式为 condition ? expr1 : expr2
。其含义是:如果 condition
为真,则整个表达式的值为 expr1
,否则为 expr2
。
在这里,表达式 hours >= 10
用于判断当前的小时数是否大于等于 10。如果是大于等于 10,则不需要做任何处理,直接将 hours
赋值给自身;如果小时数小于 10,则通过 : "0" + hours
将小时数转换为两位数的格式,即在小时数前面加上字符 “0”。
总的来说,这行代码的作用是将小时数转换为两位数的格式,如果小时数小于 10 则在前面补充一个 “0”,否则不做处理。因此,在这里使用的是大于等于 10 的判断条件,而不是小于。
let week = timeDate.getDay();
getDay()
方法获取了当前日期对应的星期几