为何两个相同时间字符串的dayjs()实例用==比较返回false?
问题原因解释
第一个测试返回false的核心原因
dayjs()函数每次调用都会创建一个全新的Day.js对象实例。在JavaScript中,对象类型(包括这类第三方库的实例)使用==或===比较时,判断的是两个对象是否指向内存中的同一个引用,而非它们存储的实际时间值。
哪怕两个Day.js实例的时间内容完全一致,只要是两次调用dayjs()生成的独立实例,它们的内存引用就不相同,因此dayjs(test) == dayjs("2022-12-10T06:51:00Z")会返回false。
第二个测试返回true的原因
test和"2022-12-10T06:51:00Z"都属于字符串原始值。JavaScript中原始值的==比较逻辑是直接对比内容是否完全匹配,这里两个字符串内容完全一致,所以返回true。
正确的Day.js时间比较方式
如果要判断两个Day.js实例的时间是否相等,应该使用库提供的isSame()方法:
const test = "2022-12-10T06:51:00Z" if (dayjs(test).isSame(dayjs("2022-12-10T06:51:00Z"))){ console.log('true') } else { console.log('false') }
这个方法会直接对比两个实例存储的时间值,而非引用,因此能得到预期的true结果。
内容的提问来源于stack exchange,提问作者Trung Nguyen
相关产品推荐
相关产品推荐

