JS中的原始值和引用值

407 阅读1分钟

变量存放类型区别:

类型 包括 变量存储
原始值 Number,String,Null,Boolean,Undefinded 存储在栈中
引用值 Array,Object,Function,Date,RegExp 存储在堆中

通过实例具体了解

  • 原始值的变量类型和值都存储在栈中,栈内存和栈内存之间的赋值是拷贝。两个原始值之间不影响。
<script type="text/javascript">
  var num = 10;
  var num1 = num; 
  num = 20;
  document.write(num1);//10
</script>

num1 = num,把num空间的值复制到num1。

原始值的特点是不可改变,一开始num = 10,当重新赋值 num = 20时,不能在原来的地址上改变值,而是重新开辟一个空间。

  • 引用值的变量类型存储在栈中,值在堆中。当arr赋值给arr1时,在栈中拷贝地址,然后根据地址指向堆中内容。
<script type="text/javascript">
   var arr = [1,2];
   var arr1 = arr;
   arr.push(3);
   document.write(arr);//1,2,3
   document.write(arr1);//1,2,3
</script>

  • 引用值重新赋值,是新开辟一个空间,指向新的地址。所以原来的arr1不会随着arr的改变而改变。此时各自指向的地址已经不一样了。
<script type="text/javascript">
   var arr = [1,2];
   var arr1 = arr;
   arr = [1,2,3];
   document.write(arr);//1,2,3
   document.write(arr1);//1,2
</script>