1. 程式人生 > >基本類型、引用類型的復制、傳遞參數

基本類型、引用類型的復制、傳遞參數

操作 引用傳遞 基本類型 不能 基本類 one 結束 span 傳遞

基本類型:指的是簡單的數據段。基本數據類型是按值訪問的,因為可以操作保存在變量中的實際值

  • 引用類型:指那些由多個值構成的對象。引用類型的值是保存在內存中的對象。JavaScript不允許訪問內存中的位置,也就是說不能直接操作對象的內存空間。在操作對象時,實際上是在操作對象的引用而不是實際的對象,為此,引用類型的值是按引用訪問的。

復制變量值

1、基本類型的復制

從一個變量向另一個變量復制基本類型的值,會在變量對象上創建一個新值,然後把該值復制到新變量分配的位置上。在此之後的任何操作,兩個值之間互不影響

技術分享圖片

2、引用類型的復制

當從一個變量向另一個變量復制引用類型的值時,同樣也會在變量對象中的值復制一份到為新變量分配的空間中。不同的是,這個值的副本實際上是一個指針,而這個指針指向存儲在堆中的一個對象

。復制操作結束後,兩個變量實際上將引用同一個對象。因此,改變其中一個變量,就會影響另一個變量

技術分享圖片

傳遞參數

ECMAScript中所有函數的參數都是按值傳遞的。也就是說,把函數外部的值復制給函數內部的參數,就和把值從一個變量復制到另一個變量一樣。基本類型值的傳遞同基本類型變量的復制一樣,而引用類型值的傳遞,則如同引用類型變量的復制一樣。

在向參數傳遞基本類型的值時被傳遞的值會被復制給一個局部變量(即命名參數,或者用ECMAScript的概念來說,就是arguments對象中的一個元素)。在向參數傳遞引用類型的值時,會把這個值在內存中的地址復制給一個局部變量,因此這個局部變量的變化會反映在函數的外部。

按值傳遞、按引用傳遞、按共享傳遞 (之間的區別見此文)

檢測類型

  • typeof操作符:確定一個變量是不是基本類型的最佳工具。如果變量的值是一個對象或null,則typeof操作符將返回“object”。
  • instanceof操作符:確定變量是什麽類型的對象。

基本類型、引用類型的復制、傳遞參數