91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

比較JavaScript日期對象時踩的坑是怎樣的

發布時間:2021-09-30 11:27:04 來源:億速云 閱讀:168 作者:柒染 欄目:web開發

本篇文章為大家展示了比較JavaScript日期對象時踩的坑是怎樣的,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

直覺上,兩個相同的日期之間比較應該是相等的,然而結果并不是這樣:

const d1 = new Date('2019-06-01'); const d2 = new Date('2018-06-01'); const d3 = new Date('2019-06-01');   d1 === d3; // false d1 == d3; // false

可以看到,無論用===還是==,結果都是false。細想也不奇怪,畢竟是兩個獨立的 JS  對象,并不是基本數據類型的變量。那該怎么判斷日期是否相等呢?

可以用toString()或者valueOf()。日期對象的toString()方法將日期轉成 ISO 日期字符串形式,而valueOf()  方法則將日期轉成毫秒數字形式的時間戳。

const d1 = new Date('2019-06-01'); const d2 = new Date('2018-06-01'); const d3 = new Date('2019-06-01');   // Sat Jun 01 2019 08:00:00 GMT+0800 (中國標準時間) d1.toString(); d1.valueOf(); // 1559347200000   d1.toString() === d2.toString(); // false d1.toString() === d3.toString(); // true   d1.valueOf() === d2.valueOf(); // false d1.valueOf() === d3.valueOf(); // true

有意思的是,雖然== 和 === 不能用來比較日期對象,< 和> 卻可以:

d1 < d2; // false d1 < d3; // false   d2 < d1; // true

因此,要判斷日期a是否在日期 b之前,只要判斷a < b是否為true。另外,日期之間還能用-操作符相減,返回毫秒差值。

const d1 = new Date('2019-06-01'); const d2 = new Date('2018-06-01'); const d3 = new Date('2019-06-01');   d1 - d3; // 0 d1 - d2; // 1 年的毫秒數, 1000 * 60 * 60 * 24 * 365

也就是說,你可以用a - b 結果的正負來判斷兩個日期的先后。

數組排序的坑

日期對象數組排序的結果很可能出乎意料。比如下面這個排序:

const d1 = new Date('2017-06-01'); const d2 = new Date('2018-06-01'); const d3 = new Date('2019-06-01');   [d2, d1, d3].sort(); // [d2, d3, d1]

按理說從小到大排序應該是[d1, d2, d3],結果很意外。這是為什么呢?原來,JavaScript  數組的sort方法默認是比較元素的字符串形式。因此,上面的sort實際上是基于下面的結果來排序的:

[ 'Fri Jun 01 2018 08:00:00 GMT+0800 (中國標準時間)',   'Sat Jun 01 2019 08:00:00 GMT+0800 (中國標準時間)',   'Thu Jun 01 2017 08:00:00 GMT+0800 (中國標準時間)' ]

怎么解決這個問題?很簡單,傳一個自定義的排序函數compare()給sort()方法。這個compare()函數的返回值確定了兩個元素的大小(先后順序):

  • 0 表示 a 和b 相等

  • 正值表示 a > b,也就是a在b后面

  • 負值表示 a < b,也就是a在b前面

由于 JavaScript 日期對象可以直接相減,那這個比較函數就很簡單了:

const d1 = new Date('2017-06-01'); const d2 = new Date('2018-06-01'); const d3 = new Date('2019-06-01');   [d2, d1, d3].sort((a, b) => a - b); // [d1, d2, d3]

下次碰到數組數組默認排序出現這樣的結果你也就不感到奇怪了:

const a = [1, 4, 3, 12]; a.sort(); // [1, 12, 3, 4]

所以為了防止出現 Bug,應該傳入自定義排序函數。

上述內容就是比較JavaScript日期對象時踩的坑是怎樣的,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永寿县| 双柏县| 二连浩特市| 达拉特旗| 济阳县| 阳西县| 浦江县| 花莲县| 武胜县| 休宁县| 策勒县| 香河县| 邹城市| 葫芦岛市| 高要市| 宜兰市| 科技| 壶关县| 萍乡市| 高唐县| 美姑县| 临夏县| 河北区| 新竹市| 班玛县| 沙坪坝区| 内江市| 垫江县| 原阳县| 祁门县| 大埔县| 赣榆县| 秦皇岛市| 弥勒县| 吉木乃县| 太仓市| 静宁县| 安远县| 兴海县| 迁西县| 东阳市|