你真的知道Javascript原始值和引用值吗

文章导航

      • 原始值
      • 引用值


Javascript 中,统一使用 var 进行变量声明,变量的类型是由值决定的。值的类型可以分为 原始值引用值 两类。

原始值

原始值包含 StringNumberBoolean 类型的数据和 nullundefined 这两个值。
原始值通常存储在栈内存中,原始值之间的赋值方式是将值拷贝一份给另一个变量。看下面的简单例子:

var a = 10,
	b = a;
	a = 20

上面的赋值过程需要经过下面的步骤:

  • 在栈内存中为变量 a 开辟内存并赋值 10
  • 将 a 中的值拷贝一份放到 b 中
  • 抹去原来的 a ,为 a 重新开辟内存并赋值 20(原来的数据一直是存在的,只不过 a 变量不再指向它)
    你真的知道Javascript原始值和引用值吗_第1张图片

引用值

引用值主要是 ObjectArrayFunction ,引用值的赋值方式是将堆内存中的地址存在相应的变量中。同样参考下面的例子:

var arr = [12],
	arr1 = arr;
	arr.push(3)
	console.log(arr, arr1) //[1,2,3] [1,2,3]

大致可以理解为下面的示意图(实际的堆内存要相对复杂,此处为示意)
你真的知道Javascript原始值和引用值吗_第2张图片
这也是为什么 arr 的值被改变的时候,arr1 也会跟着变化。
上面是使用 push() 方法对数组的内容进行了改变,如果采用直接赋值的方式又会有不同,再看下面的例子:

var arr = [12],
	arr1 = arr;
	arr = [1,2,3]
	console.log(arr, arr1) //[1,2,3] [1,2]

直接赋值就不是在原来的基础上进行修改,而是会重新开辟内存并改变 arr 指向的地址
你真的知道Javascript原始值和引用值吗_第3张图片

你可能感兴趣的:(JavaScript)