变量存放类型区别:
类型 | 包括 | 变量存储 | |
---|---|---|---|
原始值 | 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>