好家伙,本篇為《JS高級程式設計》第五章的學習筆記 1.基本引用類型 引用值(或者對象)是某個特定引用類型的實例,在ECMAScript中,引用類型是把數據和功能組織到一起的結構,(像極了“類”) 經常被人錯誤的稱作“類”。 雖然從技術上講JavaScript是一門面向對象語言,但是ECMAScri ...
好家伙,本篇為《JS高級程式設計》第五章的學習筆記
1.基本引用類型
引用值(或者對象)是某個特定引用類型的實例,在ECMAScript中,引用類型是把數據和功能組織到一起的結構,(像極了“類”)
經常被人錯誤的稱作“類”。
雖然從技術上講JavaScript是一門面向對象語言,但是ECMAScript缺少傳統的面向對象編程語言所具備的某些基本結構,
包括類和介面。引用類型有時候也被稱為對象定義,因為他們描述了自己的對象引誘的屬性和方法。
對象被認為是某個特定引用類型的實例。新對象通過使用new操作符後跟一個構造函數(constructor)來創建。
構造函數就是用來創建新對象的函數,比如下麵這行代碼:
let now= new Date();
這行代碼創建了引用類型Date的一個新實例,並將它保存在變數now中。
Date()在這裡就是構造函數,它負責創建一個只有預設屬性和方法的簡單對象。
ECMAScript提供了很多像 Date 這樣的原生引用類型,幫助開發者實現常見的任務。
2.Date()
看他名字就知道,這肯定是一個跟時間有關的引用類型
使用new操作符來調用Date構造函數:
let date =new Date()
來看看我們的”日期“長什麼樣:
在不給Date()構造函數傳參的情況下,創建的對象將保存當前日期和時間。
如果我們要基於其它日期和時間創建日期對象,則必須傳入其毫秒錶示(1970年1月1日24點之後的毫秒數)
(我去,還真是)
所以我們會有輔助方法:Date.parse()和Date.UTC()
2.1.Date.parse()
Date.parse()方法接收一個表示日期的字元申參數,嘗試將這個字元串轉換為表示該日期的意數。
所有實 現都必須支持下列日期格式:
口“月/日/年”,如*5/23/2019*;
口“月名日,年”,如“May 23,2019";
口“周幾月名日年時:分:秒時區”,如*Tue May 23 2019 00:00:00 GMT—0700";
ISO 8601擴展格式“YYYY-MM-DDTHH:mm:ss.sssZ”,如2019-05-23T00:00:00(只適用於 相容ES5的實現)。
如果傳給Date.parse()的字元串並不表示日期,則該方法會返回NaN。
如果直接把表示日期的字元串傳給Date 構造函數,那麼Date會在後臺調用Date.parse()。
換句話說,下麵兩行代碼代碼跟前面那行代碼是等價的:
let today = new Date(Date.parse("December 9,2022"));
let tomorrow = new Date("December 9,2022");
看圖
2.2.Date.UTC()
Date.UTC()方法也返回日期的毫秒錶示,但使用的是跟Date.parse()不同的信息來生成這個值。
傳給Date.UTC()的參數是年、零起點月數(1月是0,2月是1,以此類推)、日(1~31)、時(0~23)、分、秒和毫秒。
這些參數中,只有前兩個(年和月)是必需的。如果不提供日,那麼預設為1日。
其他參數的預設值都是0。例子如下:
//GTM時間2022年1月1日零點
let today = new Date(Date.UTC(2022,0));
//GMT時間2022年12月9日,20點20分20秒
//註意月是要減一輸入的
let tomorrow = new Date(Date.UTC(2022,11,9,12,20,20));
console.log(today);
console.log(tomorrow);
(發現了一些和書裡面不同的地方,比如輸入的小時,會給你從早上八點開始加,如輸入12,輸出的就是 20:00 )
與Date.parse()一樣,Date.UTC()也會被Date構造函數隱式調用,但有一個區別:
這種情況下創建的是本地日期,不是GMT日期。不過Date 構造函數跟 Date.UTC()接收的參數是一樣的。
因此,如果第一個參數是數值,則構造函數假設它是日期中的年,第二個參數就是月,以此類推
//本地時間2022年12月9日,12點20分20秒
let today = new Date(2022, 11, 9, 12, 20, 20);
//GMT時間2022年12月9日,20點20分20秒
let tomorrow = new Date(Date.UTC(2022, 11, 9, 12, 20, 20));
2.3.時間的加減法
我們可以對時間進行加減操作
//GTM時間2022年12月9日,20點20分10秒
let today = new Date(Date.UTC(2022,11,9,12,20,10));
//GMT時間2022年12月9日,20點20分20秒
let tomorrow = new Date(Date.UTC(2022,11,9,12,20,20));
let now = tomorrow -today;
console.log(now);
亦或是去看看一個函數的執行時間
function dosth() {}
let start = new Date();
dosth();
let now =new Date();
result = now -start;
(ennn,也不完全能看到)
3.繼承的方法
與其他類型一樣,Date類型重寫了 toLocalestring()、tostring()和valueof()方法。但與
其他類型不同,重寫後這些方法的返回值不一樣。Date類型的toLocalestring()方法返回與瀏覽器運行的本地環境一致的日期和時間。
這通常意味著格式中包含針對時間的AM(上午)或PM(下午),但不包含時區信息(具體格式可能因瀏覽器而不同)。
tostring()方法通常返回帶時區信息的日期和時間,而時間也是以24小時制(0~23)表示的。
Date類型的valueOf()方法根本不返回字元串,這個方法被重寫後返回的是日期的毫秒錶示,
因此,操作符(如大小於號)可以直接使用它返回的值,舉個例子:
let today = new Date(2022, 11, 9, 12, 20, 20);
let tomorrow = new Date(2022, 11, 9, 12, 20, 21);
console.log(today.valueOf())
console.log(today>tomorrow);
console.log(today<tomorrow);
That's all