JS基礎型別的屬性賦值問題
阿新 • • 發佈:2018-11-26
參考文章: https://blog.csdn.net/yiifaa/article/details/54341112
在Javascript中,變數的型別一旦宣告為基礎型別,如果再為基礎型別的變數新增屬性,則其新建的屬性不可儲存,會自動銷燬,基本流程如下:
1. 首先將基礎型別臨時轉換為Object型別,並備份好基礎型別的值;
2. 為Object型別新增屬性;
3. 屬性賦值完成後,再將Object轉換為基本型別,並恢復為原值;
所以,整體來說,為基礎型別新增屬性的感覺就像是幻影資料,賦值完成後,就會自動銷燬臨時建立的物件,相關程式碼如下:
// 將物件宣告為number型別 var counter = 0; // 為counter新增屬性 counter.name = 'yiifaa'; // 輸出為undefined console.log(counter.name) // 輸出為number typeof(counter) // 輸出為0 console.log(counter) // 物件中的引用也是如此 var user = { // 宣告為boolean型別 enabled : true } // 為enabled新增屬性 user.enabled.time = Date.now(); // 依舊輸出為undefined console.log(user.enabled.time) // 依舊輸出為bool console.oog(user.enabled)
//基本型別賦值屬性 var counter = 0; counter.name = '11'; console.log(counter.name);//undefined console.log(typeof(counter)); //number //引用型別賦值基本型別 var testObj = {}; testObj['name'] = 'aaa'; console.log(typeof(testObj)); //object console.log(testObj['name']); //aaa testObj = 12; console.log(testObj); //12 console.log(typeof(testObj)); //number console.log(testObj['name']); //undefined
將引用型別賦值為基礎型別,則不會出現幻影資料。