物件程式庫

ArrayBooleanFunctionNumberObjectString
DateJSONMapMathPromiseRegExpSet
AudioCanvasURLVideo


Array

Array 物件是 JavaScript 提供「陣列」資料結構的解決方案。雖然採行這樣的方式,只能建立一維陣列,但還是可以對陣列產生陣列的方式,來實現多維陣列的設計。

at(索引)取得第幾筆資料,可用負數表示尾端資料。
concat(元素1,元素2,…)將其它陣列或資料加入陣列。
entries()取得索引和資料。
fill(資料,[開始位置,結束位置])填滿資料。
includes(資料)檢查是否有資料。
indexOf(資料)搜尋資料位置。
join(符號)以符號為區隔,輸出陣列資料。參數省略的話預設為 , 逗號。
keys()取得所有索引編號。
lastIndexOf(資料)從陣列結尾搜尋資料位置。
length取得資料的筆數。
pop()移除最後一筆資料。
push(資料1,資料2,…)在陣列末端加入新的資料。
reverse()顛倒陣列資料的排列順序。
shift()移除第一筆資料。
slice(開始位置[,結束位置])傳回擷取範圍內的資料,可用負數表示尾端資料。
sort()進行排序。
splice(位置,數量,資料)隨參數不同,進行移除、插入、取代資料不同動作。
toReversed()傳回顛倒順序的陣列資料。
toSorted()傳回排序的陣列資料。
toSpliced(位置,數量,資料)傳回 splice 過的資料。
unshift(資料1,資料2,…)在陣列開頭加入新的資料。
values()傳回所有資料。
Array.isArray(陣列)檢查是否為陣列。
Array.of(資料,資料,…)將所有參數資料匯集成陣列。
Array.from(資料)將傳入的一筆資料解析為陣列資料。

這裡只列出操作陣列物件的功能,並未列出 ECMAScript 5 以後追加的一系列函數式設計功能!因為這些功能很難說明,要看範例才知道在做什麼,所以請進一步看 MDN 的文件,熟悉這些能提升資料結構與演算法的開發效率。


Audio and Video

對應 HTML5 的 Audio 和 Video 標籤,兩者使用一樣的 API 來控制播放音樂和影片的功能。

addTextTrack(類型,標題,語言)向影音添加新的字軌,類型有:subtitles、caption、descriptions、chapters、metadata。
audioTracks表示可用音軌的 AudioTrackList 物件。
autoplay是否在加載完成後隨即播放影音。
buffered表示影音已緩衝部分的 TimeRanges 物件。
canPlayType(類型)檢查瀏覽器是否能播放指定的影音類型,類型有:video/ogg、video/mp4、video/webm、audio/mpeg、audio/ogg、audio/mp4。
controller表示影音當前媒體控制器的 MediaController 物件。
controls影音是否顯示控制項。
crossOrigin影音的 CORS 設定。
currentSrc當前影音的 URL。
currentTime影音中的當前播放位置,以秒計。
defaultMuted影音默認是否靜音。
defaultPlaybackRate影音的默認播放速度。
duration當前影音的長度,以秒計。
ended影音的播放是否已結束。
error表示影音錯誤狀態的 MediaError 物件。
load()重新加載影音元素。
loop影音是否應在結束時重新播放。
mediaGroup影音所屬的組合,用於連接多個影音元素。
muted影音是否靜音。
networkState影音的當前網絡狀態。
paused影音是否暫停。
pause()暫停當前播放的影音。
play()開始播放影音。
playbackRate影音播放的速度。
played表示影音已播放部分的 TimeRanges 物件。
preload影音是否應該在頁面加載後進行加載。(通常用 auto)
readyState影音當前的就緒狀態。
seekable表示影音可尋址部分的 TimeRanges 物件。
seeking用戶是否正在影音中進行查找。
src影音元素的當前來源。
startDate表示當前時間偏移的 Date 物件。
textTracks表示可用字軌的 TextTrackList 物件。
videoTracks表示可用視軌的 VideoTrackList 物件。
volume影音的音量。

事件:

abort影音的加載已放棄時。
canplay瀏覽器可以播放影音時。
canplaythrough瀏覽器可在不因緩衝而停頓的情況下進行播放時。
durationchange影音的時長已更改時。
emptied目前的播放列表為空時。
ended目前的播放列表已結束時。
error在影音加載期間發生錯誤時。
loadeddata瀏覽器已加載影音的當前幀時。
loadedmetadata瀏覽器已加載影音的元數據時。
loadstart瀏覽器開始查找影音時。
pause影音已暫停時。
play影音已開始或不再暫停時。
playing影音在已因緩衝而暫停或停止後已就緒時。
progress瀏覽器正在下載影音時。
ratechange影音的播放速度已更改時。
seeked用戶已移動到影音中的新位置時。
seeking用戶開始移動到影音中的新位置時。
stalled瀏覽器嘗試獲取媒體數據,但數據不可用時。
suspend瀏覽器刻意不獲取媒體數據時。
timeupdate目前的播放位置已更改時。
volumechange音量已更改時。
waiting視頻由於需要緩衝下一幀而停止時。

Boolean

Boolean 物件用來表示 true 與 false 兩種值的資料。

它只有繼承自 Object 的 toString() 和 valueOf(物件) 兩個功能,前者以字串輸出 Boolean 物件的資料,後者將物件轉換為 Boolean 物件的資料。


Canvas

對應 HTML5 的 Canvas 標籤,用來表示繪圖區域。

height高度
width寬度
getContext('2D')取得 CanvasRenderlingContext2D 物件。
toDataURL([type], ..args)將圖像轉換成 base 64 編碼。

對 JavaScript 來說,重點是取得 CanvasRenderlingContext2D 物件後,用它來進行繪圖,有如下屬性:

dataImageData 物件,用於像素處理。
fillStyle填充的顏色。
font文字的粗斜、大小、字型,用法跟 CSS 一樣。
globalAlpha當前 alpha 值。
globalCompositeOperation新圖像如何繪製到已有的圖像上:source-over、source-atop、source-in、source-out、destination-over、destination-atop、destination-in、destination-out、lighter、copy、source-over。
lineCap線條的結束端點樣式:butt、round、square。
lineJoin兩條線相交時,所建立的拐角類型:miter、bevel、round。
lineWidth線條寬度。
miterLimit最大斜接長度。
shadowBlur陰影的模糊級別。
shadowColor陰影的顏色。
shadowOffsetX陰影距形狀的水平距離。
shadowOffsetY陰影距形狀的垂直距離。
strokeStyle線條的顏色。
textAlign文字內容的當前對齊方式:start、end、center、left、right。
textBaseline在繪製文字時使用的當前文字基線:alphabetic、top、hanging、middle、ideographic、bottom。

以及如下方法:

addColorStop(stop,color)規定漸變對像中的顏色和停止位置。
arc(x,y,r,a1,a2,c)繪製圓弧,r 為半徑,a1 a2 為弧角的起始和結束,c 為 true 表示逆時針。
arcTo(x,y,x2,y2,r)繪製兩切線之間的圓弧。
beginPath()開始繪製路徑。
bezierCurveTo(x,y,x2,y2,x3,y3)繪製貝斯曲線。
clearRect(x,y,w,h)清除矩形內的圖像。
clip()從原始畫布剪切任意形狀和尺寸的區域。
closePath()結束繪製路徑。
createImageData(w,h)建立新的 ImageData 物件。
createLinearGradient(x,y,x2,y2)建立線性漸變。
createPattern(image,pattern)指定貼圖的模式:repeat、repeat-x、repeat-y、no-repeat。
createRadialGradient(x,y,r,x2,y2,r2)建立放射狀或環形的漸變。
drawImage(image,x,y)在畫布上繪製圖像、畫布或視頻。
fillRect(x,y,w,h)繪製有填色的矩形。
fillText(text,x,y,w)在畫布上繪製文字。
fill()填色。
getImageData(x,y,w,h)將畫布指定矩形範圍內的圖像輸出為 ImageData 物件。
isPointInPath(x,y)如果指定的點位於當前路徑中傳回 true,否則 false。
lineTo(x,y)添加一個新點,然後在畫布中建立從該點到最後指定點的線條。
measureText(text)傳回指定文字寬度的物件。
moveTo(x,y)把路徑移動到畫布中的指定點,不建立線條。
putImageData(ImageData,x,y)將 ImageData 貼到畫布位置上。
quadraticCurveTo(x,y,x2,y2)繪製曲線。
rect(x,y,w,h)建立矩形。
restore()復原畫布。
rotate(a)旋轉圖像。
roundRect(x,y,w,h,r)建立圓角矩形。
save()保存畫布。
scale(w,h)縮放圖像。
setTransform(a,b,c,d,e,f)重製矩陣,然後執行 transform()。
stroke()繪製路徑。
strokeRect(x,y,w,h)繪製矩形。
strokeText(text,x,y,w)在畫布上繪製外框文字。
toDataURL()將畫布以 base64 編碼的 PNG 圖檔輸出。可輸入選擇性參數 'image/jpeg' 變成 JPEG 圖檔。
translate(x,y)移動圖像位置。
transform(a,b,c,d,e,f)將圖像轉換為矩陣。

雖然 HTML5 提供了這套 API,但沒有 GDI 電腦繪圖專業的一般人很難活用它,不花個一年半載鑽研,沒辦法藉由 Canvas 做出什麼成效來。所以在這套 API 遇到挫折不要氣餒,循序漸進一步步學成相關技術就好。

你可以透過以下章節初步了解 Canvas API 的使用情況:貼圖 (Draw pictures)連續圖像 (Sprite)雙重緩衝 (Double Buffer)翻頁 (Page Flipping)、影格 (Frame)、圖磚 (Tile),雖然無法因此成為圖形裝置電腦繪圖技術的專業,但在循序漸進的這條路上應該會有幫助。


Date

Date 物件提供處理日期與時間的功能。

然而,取得的是使用者電腦所設定的時間,所以不見得是現實生活的準確時間。

getDate()取得日期。
getDay()取得星期。
getFullYear()取得完整四位數的西元年份。
getHours()取得小時。
getMilliseconds()取得毫秒;一秒等於 1000 毫秒。
getMinutes()取得分鐘。
getMonth()取得月份。
getSeconds()取得秒數。
getTime()計算自 1970 年 1 月 1 日 0 點 0 分至今所經過的毫秒數。
getTimezoneOffset()取得當地時區和格林威治時間的時差,以分鐘計算。
getUTCDate()以國際協定時間的格式取得日期。
getUTCDay()以國際協定時間的格式取得星期。
getUTCFullYear()以國際協定時間的格式取得年份。
getUTCHours()以國際協定時間的格式取得小時。
getUTCMilliseconds()以國際協定時間的格式取得毫秒。
getUTCMinutes()以國際協定時間的格式取得分鐘。
getUTCMonth()以國際協定時間的格式取得月份。
getUTCSeconds()以國際協定時間的格式取得秒數。
getYear()取得年份。採用 19XX 尾數的方式,已不被建議使用。
setDate(日)設定日期。
setFullYear(年)設定完整四位數的西元年份。
setHours(時,分,秒,毫秒)設定小時。後面參數可同時設定完整的時間,可省略。
setMilliseconds(毫秒)設定毫秒,注意數值範圍從 0 到 999。
setMinutes(分,秒,毫秒)設定分鐘。後面的參數可同時設定秒數,可省略。
setMonth(月,日)設定月份。後面的參數可同時設定日期,可省略。
setSeconds(秒,毫秒)設定秒數。後面的參數可同時設定毫秒,可省略。
setTime()設定自 1970 年 1 月 1 日 0 點 0 分至指定日期所經過的毫秒數。
setUTCDate(日)可以輸入完整的國際協定時間格式來設定日期。
setUTCFullYear(年)可以輸入完整的國際協定時間格式來設定年份。
setUTCHours(時)可以輸入完整的國際協定時間格式來設定小時。
setUTCMilliseconds(毫秒)可以輸入完整的國際協定時間格式來設定毫秒。
setUTCMinutes(分)可以輸入完整的國際協定時間格式來設定分鐘。
setUTCMonth(月)可以輸入完整的國際協定時間格式來設定月份。
setUTCSeconds(秒)可以輸入完整的國際協定時間格式來設定秒數。
setYear(19XX 年的尾數)採用 19XX 尾數的方式來設定年份,已不被建議使用。
toDateString()輸出日期。
toGMTString()以格林威治平均時間格式輸出完整日期與時間。
toISOString()以 ISO 的格式輸出完整日期與時間。
toJSON()將時間值以 JSON 字串輸出。
toLocaleDateString()以作業系統的本地時間格式輸出日期。
toLocaleTimeString()以作業系統的本地時間格式輸出時間。
toLocaleString()以作業系統的本地時間格式輸出字串。
toTimeString()輸出時間。
toUTCString()以國際協定時間的格式輸出完整日期與時間。
Date(年,月,日,時,分,秒,毫秒)依參數建立時間值,可省略後面沒用到的參數。
Date.now()傳回 POSIX 時間的毫秒數。
Date.parse(字串)剖析字串中的格式,轉為時間值。
Date.UTC(年,月,日,時,分,秒,毫秒)產生 POSIX 時間的毫秒數。

new Date() 不輸入參數,會以當下時間為參數。

輸入字串當時間,格式就像 1995-12-04T12:34:56,依此類推。

在設定為台北地區的作業系統使用 getTimezoneOffset(),會傳回 -480 分鐘,也就是慢八小時的意思。


Function

JavaScript 把 function(函式)設計為 first class object(第一級物件),所有函式都是 Function 物件,而且是最高層級的型別,能夠當作參數傳遞!

apply(指標,參數群)代入指標與 arguments 給函式來使用物件。
arguments這是個物件,可以更多元地處理傳進來的參數,但是只能在函式內部使用。
bind(指標,參數群)產生新的函式並附加到指標的 method。
call(指標,參數1,參數2,…)調用函式,但 this 為傳入的指標。
length傳回參數的個數。

call 其實就跟正常呼叫函式一樣,只是能指定 this 的接收者。

apply 可以把多個參數的函式,改用陣列替代,變成只需一個參數就好。它的用途不是指定 this 的接收者,所以接收者通常設為 null。

bind 不是呼叫函式,而是將函式建立成一個新的 function 物件給接收者,就像接收者自己有了這個方法一樣。通常用在傳入匿名函式參數的場合,也就是把 bind 出來的 function 物件當匿名函式傳入參數。


JSON

藉由 eval() 能執行字串中的程式,讓 JavaScript 能將物件轉為字串保存起來,日後再從字串轉為物件,所規範出來的資料格式,全文為 JavaScript Object Notation。

JSON.parse(字串)將 JSON 轉為物件
JSON.stringify(物件)將物件轉為 JSON

如果你不知道這是怎麼回事,來看範例:


{"name":"Twideem Civs","number":58}
接續上面的範例,現在還原 json 字串為另一個新的物件:


Twideem Civs
twideem@outlook.com

字串很容易寫在檔案保存起來,有了 JSON 等於 JavaScript 有了序列化的機制。


Map

鍵值對資料結構,與 Object 的差別在於照 set() 資料的順序排列資料,不會排序,且迭代性能提高。

clear()清除所有資料。
delete(鍵)刪除一筆資料。
entries()以 Iterator 傳回所有名稱與資料。
forEach(回呼函式)隨資料的列舉過程執行程式功能。
get(鍵)取得資料。
has(鍵)檢查是否有某筆資料。
keys()以 Iterator 傳回所有名稱。
set(鍵,值)加入資料。
size取得資料筆數。
values()以 Iterator 傳回所有資料。
Map.groupBy(項目,回呼函式)分組資料。

Math

Math 是適合用來做數學運算的物件。特別的是,Math 物件不能使用 new 來建立,必須直接呼叫它的函數與常數。

Math.abs(x)絕對值。
Math.acos(x)反餘弦。
Math.acosh(x)雙曲反餘弦。
Math.asin(x)反正弦。
Math.asinh(x)雙曲反正弦。
Math.atan(x)反正切。
Math.atan2(x,y)傳回從X軸到點 (X,Y) 的角度。
Math.atanh()雙曲反正切。
Math.cbrt(x)立方根。
Math.ceil(x)無條件進位。
Math.clz32(x)轉為 32 位數二進制值。
Math.cos(x)餘弦。
Math.cosh(x)雙曲餘弦。
Math.exp(x)e 的 X 次方。
Math.expm1(x)e - 1 的 X 次方。
Math.floor(x)無條件捨去。
Math.fround(x)用浮點數四捨五入。
Math.hypot(x,…)平方和的平方根。
Math.imul(x,y)32 位元整數相乘。
Math.log(x)自然對數。
Math.log10(x)底數為 10 的對數
Math.log1p(x)X+1 的自然對數。
Math.log2(x)底數為 2 的對數。
Math.max(x,y,z,…)傳回最大的那個參數值。
Math.min(x,y,z,…)傳回最小的那個參數值。
Math.pow(x,y)X 的 Y 次方。
Math.random()隨機取得 0 到 1 之間的小數。
Math.round(x)四捨五入。
Math.sign(x)是正數傳回 1、負數 -1、正零 0、負零 -0。
Math.sin(x)正弦。
Math.sinh(x)雙曲正弦。
Math.sqrt(x)平方根。
Math.tan(x)正切。
Math.tanh(x)雙曲正切。
Math.trunc(x)去掉小數,只留整數。
Math.E自然對數的底數。
Math.LN1010 的自然對數。
Math.LN22 的自然對數。
Math.LOG10E以 10 為底數 e 的對數。
Math.LOG2E以 2 為底數 e 的對數。
Math.PI圓周率。
Math.SQRT1_2根號 2 分之 1。
Math.SQRT2根號 2。

大多是直接套用的數學函數,只有 random() 的使用比較複雜,需要另外說明!它是我們取得「亂數」的管道,但它傳回的值是小數點達十幾個位數、介於 0.0 到 1.0 之間,所以如果不另外處理的話,傳回來的值不適合我們使用。

通常我們取得亂數的情況希望是整數,因此常見的用法是使用四捨五入的方式來處理 random() 的值……

Math.round(Math.random()*(最大值-最小值))+最小值

如果你需要傳回 3 到 9 之間的亂數,就是:


除了使用四捨五入的 round(),有時候會想使用無條件進位的 ceil() 或無條件捨去的 floor(),差異如下:


當你希望產生的亂數直接對照陣列索引值,就適合直接用 floor():


Number

Number 物件可以直接決定數值資料的輸出方式。在 JavaScript 我們稍不留意,資料容易就會轉為字串來處理,使用 Number 物件來確保使用數值資料。

toExponential(小數位數)將資料以指數形式輸出。
toFixed(小數位數)將資料以小數點的形式輸出。
toPrecision(保留位數)設定保留的位數來輸出資料。
Number.siFinite(資料)檢查資料是否為無限大。
Number.siInteger(資料)檢查資料是否為整數。
Number.siNaN(資料)檢查資料是否為 NaN。
Number.siSafeInteger(資料)檢查資料是否為安全精度範圍的整數。
Number.EPSILON傳回 ε 常數。
Number.MAX_SAFE_INTEGER傳回安全精度範圍內的最大數值。
Number.MAX_VALUE傳回 JavaScript 所能接受的最大數值。
Number.MIN_SAFE_INTEGER傳回安全精度範圍內的最小數值。
Number.MIN_VALUE傳回 JavaScript 所能接受的最小數值。
Number.NaNNot a number。
Number.NEGATIVE_INFINITY負無限大。
Number.POSITIVE_INFINITY無限大。

Object

所有物件都會繫結 Object 的 prototype,因此 Object 最主要作用,就是在內部做為其它物件的共通功能!像是所有物件都能以 toString() 輸出資料、都能以 valueOf() 將資料轉換成各自己型態的資料、都能以 constructor 做為 class 語法的建構式。

其次是以 Object. 開頭的功能,方便外部使用者組織程式碼,讓 JavaScript 這門動態型別的物件導向語言,也能有效管理大量程式碼。

constructor建構式。
hasOwnProperty(屬性)檢查是否有自己的屬性,非繼承而來。
isPrototypeOf(物件)檢查物件是否在原型鏈中。
name傳回物件名稱。
propertyIsEnumerable(屬性)檢查屬性是否可迭代。
prototype原型。
toString()以字串輸出資料。
valueOf(物件)轉換為物件型態的資料。
Object.assign(物件,物件)將物件合併並傳回新物件。
Object.create(物件)複製新的物件。
Object.defineProperites(物件,屬性群)用 object literal 定義屬性。
Object.defineProperty(物件,屬性,值)用 object literal 定義一個屬性。
Object.entries()以鍵值對取得所有屬性。
Object.freeze(物件)禁止物件被複製。
Object.fromEntries(物件)將鍵值對資料轉為物件。
Object.getOwnPropertyDescriptor(物件)取得自有屬性的描述。
Object.getOwnPropertyDescriptors(物件)取得自有屬性的描述。
Object.getOwnPropertyNames(物件)取得自有屬性的名稱。
Object.getOwnPropertySymbols(物件)取得自有屬性的內容。
Object.getPrototypeOf(物件)取得物件的原型。
Object.hasOwn(屬性)檢查是否有自己的屬性,非繼承而來。
Object.is(物件值,物件值)檢查兩個值是否連型別也相同。
Object.isExtensible(物件)檢查物件是否為 preventExtensions() 狀態。
Object.isFrozen(物件)檢查物件是否為 freeze() 狀態。
Object.isSealed(物件)檢查物件是否為 seal() 狀態。
Object.keys()取得所有屬性名稱。
Object.preventExtensions(物件)禁止物件被增加屬性和功能。
Object.seal(物件)禁止物件被增刪屬性和功能。
Object.setPrototypeOf(原型,物件)設定原型為另一個物件。
Object.values()取得所有屬性值。

Object 有多好用,看了範例就知道,簡直能讓人下出一手神乎其技:


abc
123
1,2,3


Promise

用來設計非同步(asynchronous)執行的程式。

all(iterable)iterable 全都 resolved 的話傳回 Promise。
allSettled(iterable)iterable 全都 settled 的話傳回 Promise。
any(iterable)iterable 有 resolved 的話傳回 Promise。
catch(onRejected)有觸發 onRejected 的話傳回 Promise。
finally(onFinally)有觸發 onFinally 的話傳回 Promise。
race(iterable)無論 iterable 有 resolved 或 reason 都傳回 Promise。
reject(reason)reason 的話傳回 Promise 物件。
resolve(value)value 是 thenable 的話傳回 Promise。
then(onFulfilled[,onRejected])產生 Promise 時執行回呼函式。

在 JavaScript 3 時代,想另外開一個執行序來進行非同步運算,都是用 setTimeout()。但 setTimeout() 把要執行的程式寫在回呼函式裡,當非同步運算複雜到一條又一條的執行序,會導致一層又一層的回呼函式:


Promise 可以用串接一個又一個 then() 函式解決回呼地獄的問題:


注意!Promise 並不是執行序,它本身並沒有執行序的功能,Promise API 是用來為非同步程式設計制定一個上下文語義的框架,畢竟就本文所舉的例子,執行序只是用來設計非同步運算的一個手段。所以它不叫 Thread,而叫 Promise,它可用來表示非同步運算結果為成功或失敗。如果你需要的是比 setTimeout() 和 setInterval() 更正式一點的執行序,可以用 Web worker。

底下範例會在三秒後輸出 Hello! 訊息:


Promise() 建構函式可接受兩個參數,第一個用在有結果的情況,通常參數名稱取為 resolve,第二個用在沒有結果的情況,通常參數名稱取為 reject。範例只對有結果的情況做出反應,沒有結果的話其實可以進一步除錯或防呆。

then() 會在 Promise 送出 resolve() 的情況下有反應,它會獲得 resolve() 傳回的值,並將它傳入第一個參數,運作完會再將 Promise 本身傳回,也就是再度獲得同一個 Promise,這也是 then() 可以串接的原因,能持續對同一個 Promise 做出反應。

就像 resolve 對應 then(),reject 的話可以用 catch() 來做反應。

除了用建構函式設計非同步程式,也可以直接用 Promise.resolve() 和 Promise.reject() 產生有結果的 Promise 和沒有結果的 Promise:


RegExp

RegExp 物件用來實現 Regular Expressions,這是一種強大的字元匹配機制。

exec(正規式)匹配正規式,成立的話傳回資料。
flags取得 d g i m s u y 設定狀態。
test(正規式)匹配正規式,成立傳回 true,否則 false。

還有 hasIndices、global、ignoreCae、multiline、dotAll、unicode、sticky 屬性沒列出來,這是因為通常要設定這些狀態的話,不如改用 /正規式/dgimsuy 這語法糖來簡化 RegExp 的操作。


Set

集合資料結構,與 Array 的差別在於資料不會重複,且迭代性能提高。

add(值)加入資料。
clear()清除所有資料。
delete(值)刪除一筆資料。
forEach(回呼函式)隨資料的列舉過程執行程式功能。
has(值)檢查是否有某筆資料。
size取得資料筆數。
values()以 Iterator 傳回所有資料。

Set 雖然也有 entries() 和 keys(),但那是為了能和混用 Map() 防錯用的。

來看個有趣的範例:


2,0,1


String

String 物件可以對「文字資料」進行多種操作,例如:搜尋、替換、擷取。

at(字元位置)傳回指定位置的字元,允許負號倒數。
charAt(字元位置)傳回指定位置的字元。
charCodeAt(字元位置)以 UTF-16 傳回指定位置字元的 Unicode 編碼。
codePointAt(字元位置)傳回指定位置字元的 Unicode 編碼。
concat(字串,字串,…)將多個字串結合成一串。
endsWith(文字)字串是否以文字結尾。
inclueds(文字)檢查是否包含文字。
indexOf(比對字串)比對是否出現所指定的字串,並傳回找到的字元位置。
isWellFormed()檢查字串是否完全 Uncicode 而非 UTF-16。
lastIndexOf(比對字串)類似 indexOf(),但由後往前找。
length取得文字的長度。
localeCompare(字串)很難說明,請看 MDN 的範例比較快。
match(正規表示法)比對 RegExp 條件,有的話傳回找到的資料。
matchAll(正規表示法)比對 RegExp 條件,有的話傳回找到的資料。
normalize('NFD'|'NFKC'|'NFKD')指定格式傳回 Uncicode 字串,不指定的話為 'NFC'。
padEnd(長度[,文字])字數不足時,在尾端填上文字。
padStart(長度[,文字])字數不足時,在頭端填上文字。
repeat(次數)以次數複製字串。
replace(正規表示法,替代字串)比對 RegExp 條件,有的話改為替代文字並傳回資料。
replaceAll(正規表示法,替代字串)比對 RegExp 條件,有的話改為替代文字並傳回資料。
search(正規表示法)比對 RegExp 條件,有的話傳回找到的位置。
slice(開始位置,結束位置)擷取範圍內的字串,結束位置可用負數表示倒數。
split(分割點,區段)以分割點作依據,將字串切成好幾個區段。區段可省略。
startsWith(文字)字串是否以文字開頭。
substr(開始位置,長度)從指定位置開始擷取指定長度的字串。
substring(位置,位置)擷取位置到位置範圍內的字串,兩位置大小順序可顛倒。
toLowerCase()將英文字母以小寫輸出。
toUpperCase()將英文字母以大寫輸出。
toWellFormed()以完全 Unicode 編碼輸出字串,而不是以 UTF-16 方式進行。
trim()刪除頭尾兩端空白。
trimEnd()刪除尾端空白。
trimStart()刪除頭端空白。
String.fromCharCode(字元編碼,…)以 UTF-16 輸出 Unicode 編碼對應的字元。
String.fromCodePoint(字元編碼,…)輸出 Unicode 編碼對應的字元。
String.raw`字串`Template literal。

JavaScript 的字串使用 UTF-16,不夠處理完整的 Unicode 編碼,於是追加 code point 和 well formed 等做法解決問題。

substr() 並不是標準,但它往往比 substring() 好用而被廣泛使用,於是規格書刻意 deprecated 說不建議使用這項功能。對此我的想法是,就算有哪個程式引擎沒實作 substr(),我也會自己加到 String.prototype,沒理由不用它 (●'◡'●)


非標準功能:以 HTML 4.01 格式輸出文字

anchor()將文字以 <A NAME></A> 格式輸出
big()將文字以 <BIG></BIF> 格式輸出
blink()將文字以 <BLNK></BLINK> 格式輸出
bold()將文字以 <B></B> 格式輸出
fixed()將文字以 <TT></TT> 格式輸出
fontcolor()將文字以 <FONT COLOR=''></FONT> 格式輸出
fontsize()將文字以 <FONT SIZE=''></FONT> 格式輸出
italics()將文字以 <I></I> 格式輸出
link()將文字以 <A HREF=''></A> 格式輸出
small()將文字以 <SMALL></SMALL> 格式輸出
strike()將文字以 <STRIKE></STRIKE> 格式輸出
sub()將文字以 <SUB></SUB> 格式輸出
sup()將文字以 <SUP></SUP> 格式輸出

坦白說,把網頁當 GUI 寫應用程式時,這些 deprecated 的功能蠻好用的,程式碼很優雅,我甚至想自行追加更多這樣的輸出函式來用 (๑•̀ㅂ•́)و✧


URL

URL 能在從網址中取得通訊行定、域名、埠號、標識,以及夾帶的參數資料。

hash傳回 # 的標識(fragment)
host傳回域名和埠號
hostname傳回域名
href傳回完整網址
pathname傳回資料夾和檔案的路徑字串
port傳回埠號
protocol傳回通訊協定
search傳回 ? 的參數
searchParams傳回 URLSearchParams 物件,可用 get() 直接取得參數。

你很難不喜歡這個功能:


notepad
進一步把 window.location 傳給 URL(),就能取得網頁夾帶的參數資料。