在 JS 中,轉換值的型別大致可分為兩種方式,一種是明確的,一種是隱含的,而不論是哪一種,JS 對於轉換值的型別常慣例統稱為「強制轉型(coercion)」。
JS 的強制轉型永遠都只會得到一個純量基本值(scalar primitive),也就是
string
、number
和boolean
,而不會得到如object
、array
等這類複合值。
封箱(Boxing)會將一個基本型別值包裹在對應的物件中,也就是隱性地將一個值變為
object
,但準確來說這不是真正的強制轉型。
通常來說,明確強制轉型指的是調用如 String()
這種字面上就表明出意義的函式,隱含強制轉型則是那些執行過程中由程式自動轉型的操作:
// 明確強制轉型
console.log(String(42)); // "42"
console.log((42).toString()); // "42"
// 隱含強制轉型
console.log(42 + ""); // "42"
另外,「明確」與「隱含」都是相對的說法,明確或隱含強制轉型並沒有絕對的定義,而是因人而異的。
在 JS 中,有幾種轉換型別的操作:
string
值被強制轉型為 string
表現形式時的轉換過程number
值被要求作為 number
使用時的轉換過程(比方說數學計算)boolean
值如何轉換為相等的 boolean
boolean
時,一律返回 true
string
時,會先調用 toString
再調用 valueOf
,並對返回的純量基本值執行 ToString 操作number
時,會先調用 valueOf
再調用 toString
,並對返回的純量基本值執行 ToNumber 操作下一篇就來討論關於型別轉換的這四種抽象操作。