参考文章: 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将引用类型赋值为基础类型,则不会出现幻影数据。