原始值和引用值的区别

原始值和引用值的定义方式很类似,都是创建一个变量,然后给它赋一个值。不过,在变量保存了这个值之后,可以对这个值做什么,则大有不同。对于引用值而言,可以随意添加、修改和删除其属性和方法。比如:

    let person = new Object();
    person.name = "Nicholas";
    console.log(person.name);//Nicholas

这里是首先创建了一个对象,并把它保存在变量person中。然后,给这个对象添加了一个名为name的属性,并给这个属性赋值了一个字符串“Nicholas”。在此之后,就可以访问这个新属性,直到对象被销毁或属性被显示地删除。
原始值不能有属性,尽管尝试给原始值添加属性不会报错。比如:

  let name = "Nicholas";
  name.age = 18;
  console.log(name.age); //undefined

在此,代码想给字符串name定义一个age属性并给该属性赋值18,在下一行,属性不见了。记住,只有引用值可以动态添加后面可以使用的属性
注意,原始类型的初始化可以只使用原始字面量形式。如果使用的是new关键字,则JavaScript会创建一个Object类型的实例,但其行为类似原始值。下面是两种初始化方式的差异:

    let name1 = "Nicholas";
    let name2 = new String("Matt");
    name1.age = 27;
    name2.age = 26;
    console.log(name1.age); // undefined
    console.log(name2.age); // 26
    console.log(typeof name1); // string
    console.log(typeof name2); // object
posted @ 2021-10-17 19:07  Caesar_Y  阅读(73)  评论(0编辑  收藏  举报