同步發佈於Medium及個人部落格
介紹JavaScript中很重要的觀念 Mutable 及 Immutable Objects,並以範例解釋他們的差別。
Immutable object
- 所有的原始資料型態(primitive),包含 null, undefined, string, number, boolean, symbol, bigint,都是immutable。
- immutable object是透過call by value的方式,會指向新分配的記憶體位置再存入值,因此object在建立之後就不可再被改變。
- 當重新賦值時,會指向新分配的記憶體位置,而非直接改變記憶體裡的值,原本的記憶體位置會被garbage collection,換句話說他是被取代而不是直接被修改。
🌰 #1
🌰 #2
Mutable object
- 除了primitive之外的object, array都是mutable。
- mutable object是透過call by sharing的方式,共享同一個記憶體位置,因此object建立之後可再被改變。
- 需要注意的是,當重新賦值時,仍會指向新分配的記憶體位置,結束原本的記憶體共享,因此原本的object不會被改變。
🌰 #1
🌰 #2
Reference:
https://developer.mozilla.org/en-US/docs/Glossary/Mutable
https://blog.techbridge.cc/2018/06/23/javascript-call-by-value-or-reference