強制轉型(Coercion)


JavaScript 共有下列七種「原始資料類型(primitive data types)」:

  1. Number
  2. String
  3. BigInt
  4. Boolean
  5. Null
  6. undefined
  7. Symbol

相對於「物件」,原始資料類型並沒有自己的「屬性」與「方法」


然而,神奇的是,我們還是可以針對這些資料進行操作!例如要將一字串全部改為大寫,可以直接套用「toUpperCase()」達成如下:

宣告變數「String」、並賦值為「”abcde”」後,居然可直接套用「toUpperCase()」將內容都轉為大寫,難不成這個字串變數本身就有自己的方法?但這不就違背了其身為「原始資料類型」應有的特性嗎?


強制轉型(coercion)

這是因為原始資料類型會被「強制轉型」,在某個瞬間,「String」這個變數被強制轉成「new String」,因此適用「String.prototype」的屬性與方法,包含「toUpperCase()」,但套用完該方法之後,就變回原本的原始資料類型。

當然也可以直接在變數宣告時,就以實例形式宣告為「new String」,這當中的「String」是 JavaScript 預設的建構子函式(constructor function),因此「String.prototype」會自帶許多屬性與方法,但這些屬性與方法不一定用得上,還會造成記憶體額外負擔,因此,既然有強制轉型機制,宣告時就以「原始資料類型」形式即可。

#javascript #強制轉型







你可能感興趣的文章

從 V8 bytecode 探討 let 與 var 的效能問題

從 V8 bytecode 探討 let 與 var 的效能問題

Node.js Advanced Interview Questions for Experienced Professionals

Node.js Advanced Interview Questions for Experienced Professionals

Chapter 8&9 建立分析團隊&活用KPI及資訊主頁

Chapter 8&9 建立分析團隊&活用KPI及資訊主頁






留言討論