JS中原始值和引用值的儲存方式

2021-09-28 11:34:03 字數 1338 閱讀 6331

在ecmascript中,變數可以存放兩種型別的值,即原始值和引用值

根據資料型別不同,有的變數儲存在棧中,有的儲存在堆中。具體區別如下:

原始變數及他們的值儲存在棧中,當把乙個原始變數傳遞給另乙個原始變數時,是把乙個棧房間的東西複製到另乙個棧房間,且這兩個原始變數互不影響。

引用值是把  引用變數的名稱儲存在棧中,但是把其實際物件儲存在堆中,且存在乙個指標由變數名指向儲存在堆中的實際物件,當把引用物件傳遞給另乙個變數時,複製的其實是指向實際物件的指標,此時 兩者指向的 是同乙個資料,若通過方法改變其中乙個變數的值,則訪問另乙個變數時,其值也會隨之加以改變;但若不是通過方法 而是通過 重新賦值  此時 相當於 重新開了乙個房間  該值的原指標改變  ,則另外乙個 值 不會隨他的改變而改變。

看示例:

var a="hello";

var b=a;

a="world";

alert(a);

//world

alert(b);//

hello

var arr=[1,3];

arr1=arr;

arr.push(5);

alert(arr)

//1,3,5

alert(arr1);//

1,3,5

arr=[7,8];

alert(arr);

//7,8

alert(arr1);//

1,3,5

用圖來表示 結果如下:

原始變數的值互不影響,引用變數arr和arr1指向的為同一物件,所以當對arr通過方法改變其值時(堆房間裡的資料發生變化),訪問arr1的資料時就會訪問到改變後的物件

通過非方法來改變引用變數的值時,會為該引用變數重新建立乙個堆房間,此時指標也會發生變化:

總結:

number、stirng、boolean、null、underfined這些基本資料型別,他們的值直接儲存在棧中;

object、function、array、date、regexp這些引用型別,他們的引用變數儲存在棧中,通過指標指向儲存在堆中的實際物件

個人理解~~~~若有錯,請指出o(∩_∩)o~

更多專業前端知識,請上

【猿2048】www.mk2048.com

Js 中的原始值和引用值

最近開始注重自己的基礎知識,以前總是覺得自己什麼都要會一點,不精也沒關係,現在想想,感覺這種想法是錯誤的。一些最基本的基礎底層知識還是要很紮實的。原始值即一些代表原始資料型別的值,也叫基本資料型別,首先說一下js中有哪些原始值,number,string,boolean,null,undefined...

JS變數的原始值和引用值

原始值型別 undefined null boolean number 和 string 型 引用值型別 object,array 函式 儲存在堆 heap 中的物件 什麼是棧?由作業系統自動分配釋放 存放函式的引數值,區域性變數的值等,存放一些基礎型別。什麼是堆?是為動態分配預留的記憶體空間 你可...

ECMAScript 原始值和引用值

原始值 儲存在棧 stack 中的簡單資料,直接儲存在變數訪問的位置 引用值 儲存在堆 heap 中的物件,儲存在變數處的值是乙個指標,指向儲存物件的記憶體處 為變數賦值時,ecmascript的解釋程式必須判斷該值是原始型別還是引用型別 ecmascript把字串看作引用型別 引用型別的引用值大小...