The Art of Readable Code && High Performance Comments

js 在面對基本型別 (primitive) type 如 number, boolean, string 的時候,如果試圖提取其屬性或呼叫方法,則會依照當時實值,產生對應的 Number, Boolean, String 臨時物件,對該物件進行運算,回傳結果並丟棄該物件。這個機制與 C# 的 boxing & unboxing 相當接近。也因為對象是臨時物件,因此對其屬性的操作都會被忽略,而不會作用在實體(基本型別變數)上。反之亦然,當對這些 wrapper 物件操作時,如果碰到需要基本型別的場景,也是會被自動轉換。

實測結果倒頗有意外性:雖然 wrapping 原理上視同建立臨時物件,但是目前的 Chrome / Firefox 恐怕都不這麼實作。針對字串進行操作,會發現如果是 primitive type string (如 “asdf”),運算速度會比 wrapper class (new String(“asdf”) 更快!

發表迴響

分類

%d 位部落客按了讚: