定義乙個變數,他沒有型別之分,但是他的資料是有型別之分的
基本資料型別是儲存在棧中的(堆疊是資料結構的內容,棧是有序的,堆是無序的)
引用資料型別是儲存在堆中的,但是一般是堆疊都需要用的
var a = [1,2]
var b = a
這個**中,a儲存的陣列[1,2]在堆中的位址.所以它在棧中的值是乙個位址,所以它賦給b的結果也是位址,所以a和b都指向陣列[1,2]的位址,
在這裡,要特別注意的也是容易搞混的是如下**
var a = [1,2];
var b = a;
console.log(b);
var b[0] = 5;
console.log(b);
var b =[1];
console.log(b);
在這裡第乙個console結果為[5,2]第二個為[5,2]第三個為[1]
需要明白的是b[0] = 5 是修改而b = [1]是重新賦值.
var a = [1] var b= [1] 所以a===b是false因為位址不同,比較的值是棧中的值,不是堆的值.
有時候我們在寫**時,經常容易弄亂的地方就是引用型別,寫的時候要時常注意引用型別的位址有沒有變,位址中的資料修改後,有沒有其他地方引用這個位址,會不會產生影響
額外的小技巧: = 和 == ,寫==時經常容易寫成= ,我們可以把a==1寫成1==a,這樣就基本不會寫錯了,而且,這樣寫如果忘了,瀏覽器也會報錯,因為1=a.不能給常量賦值
C語言資料型別儲存位置及堆疊說明
一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構...
資料在堆疊中儲存方式
一 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注malloc,calloc,new申請的...
堆 棧及靜態資料區詳解
五大記憶體分割槽 在c 中,記憶體分成5個區,他們分別是堆 棧 自由儲存區 全域性 靜態儲存區和常量儲存區。棧 就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數 函式引數等。堆 就是那些由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式...