1. 程式人生 > >JS基礎型別的屬性賦值問題

JS基礎型別的屬性賦值問題

參考文章: 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

將引用型別賦值為基礎型別,則不會出現幻影資料。