JS数据类型(原始值+引用值)

JavaScript的数据类型分为两类:原始类型和对象类型。

  1. 原始类型 包括:number,string,boolean,underfine,null
    通常也叫基本数据类型,这些原始值是不可更改的,原始值的比较是值的比较:只有在它们的值相等时它们才相等。
    原始值 存储在栈中(栈数据):栈内存和栈内存之间的赋值是拷贝,不在一块内存,互不影响。
var a = 111 ;
var b = a ;//拷贝一份a里的值赋给b。这时b里放的值和a里的值是两个没关系值,换句话说就是副本
a = 222;
console.log(b); //打印111;即b的值不会因a的值改变而改变
  1. 对象类型:object,(js还定义了两种特殊对象:数组array和函数function)
    通常将对象称为引用类型,引用值是可变的,它们的比较并非值的比较:即使两个对象包含同样的属性及相同的值,它们也是不相等的。
    引用值 存储在堆中(堆数据):会先在栈内申请空间(var),是引用值就把内容放到堆里,然后在栈内存里放上堆内存的地址,方便找对应堆里的内容,这样把堆栈连起来。所以!引用值之间的拷贝,拷贝过去的是地址,是一个值,会互相影响。
var arr = [1, 2];//
var arr1 = arr; //先在栈内申请空间arr1,拷贝arr赋给arr1,注意这里拷贝的是地址!!地址指向的都是同一块堆内存!(相当于两个一样的钥匙即地址,开一个门即对应的堆内存)
arr.push(3);
console.log(arr1);//打印[1,2,3];
//即变量arr通过方法改变值时,是改变了堆中内容,因此arr1的值也会相应的改变。

arr = [4, 5]; //这时不是在原来的基础上改值了,而是重新申请了一块新的堆空间,让arr指向新的空间了
console.log(arr1);//所以还是打印[1,2,3];
发布了2 篇原创文章 · 获赞 3 · 访问量 830

猜你喜欢

转载自blog.csdn.net/qq_42301358/article/details/105324109
今日推荐