从内存的角度看:给一个对象初始化(null)和创建一个空对象{}的差别

给一个对象初始化的本质(null)

var stu = null 
stu.name = "aaa"
console.log(stu)  //此时会报错,因为此时还未创建stu对象,只是在栈内存占了一个位置,在堆内存中没有创建对象

//所以需要创建先一个"空对象"
stu = {}
stu.name = "aaa"
console.log(stu)
  • 给一个全局变量赋值null,相当于将这个变量的指针对象以及值清空
var stu2 = {
      name: null
    }
    console.log(stu2)
  • 如果给对象的属性赋值为null,或者局部变量赋值为null,相当于给这个属性分配了一块空的内存,值为null,JS会回收全局变量为null的对象。
//创建一个“空对象”
var obj = {}
  • 上面的"空对象"为什么打了双引号?这只是一种简称而已。在js中根本不存在真正的空对象,理解这一点至关重要!即使时最简单的{}对象也会包含从Object.prototype继承而来的属性和方法。我们提到的"空对象"只是说这个对象没有自有属性,不考虑它是否有继承而来的属性

你可能感兴趣的:(javascript)