1. 程式人生 > 其它 >原始值和引用值的區別

原始值和引用值的區別

原始值和引用值的定義方式很類似,都是建立一個變數,然後給它賦一個值。不過,在變數儲存了這個值之後,可以對這個值做什麼,則大有不同。對於引用值而言,可以隨意新增、修改和刪除其屬性和方法。比如:

    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