好家伙,本篇為《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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/539668.html
標籤:JavaScript
