原始值与引用值(一)

75 阅读1分钟

JS中的原始值与引用值

一、原始值和引用值的区别
  • 原始值是最简单的数据,而引用值则是由多个值构成的对象。保存原始值的变量是按值访问的(操作的是存储在变量中的实际值),而引用值是保存在内存中的对象,但是由于JavaScript不允许直接访问内存位置,所以不能直接操作对象所在的空间。所以在操作时,实际上操作的是对该对象的引用
二、动态属性
  • 对于引用值而言,可以随时添加、修改和删除其属性和方法
let obj = new Object();
obj.name = 'Jack';
console.log(obj.name);    // 'Jack'
  • 原始值不能有属性,尽管尝试给原始值添加属性不会报错
let name = 'Jack';
name.age = 22;
console.log(name.age);   // undefined

所以只有引用值才可以动态添加后面可以使用的属性

三、值的复制
  • 原始值的复制
let num1 = 5;
let num2 = num1;

image.pngimage.png

  • 引用值的复制
let obj1 = new Object();
let obj2 = ojb1;
obj1.name = 'Jack';
console.log(obj2.name)   // 'Jack'

这里复制的引用值实际上是复制了一个指针,指向了obj1存储在堆内存中的对象。两个变量实际上指向同一个对象,所以当一个对象发生变化后,另外一个变量指向的对象也会发生相应变化

image.png