關於js中基本資料型別、引用資料型別區別
堆疊(stack)和堆疊(heap)
stack為自動分配的內存空間,它由系統自動釋放;而heap則是動態分配的內存,大小不定也不會自動釋放。
基本型別與參考型別
基本型別:存放在堆疊記憶體中的簡單資料段,資料大小決定,記憶體空間大小可以分配。
基本資料類型有Undefined、Null、Boolean、Number 和String,他們的值是直接存放在堆疊中;
引用類型:存放在堆記憶體中的物件的值,由位址指標與值組成,位址保存在堆疊中,實際的值保存在堆中,堆中的每個空間大小不一樣,根據情況進行特定的分配。當我們需要存取參考型別(如對象,數組,函數等)的值時,首先從棧中獲得該對象的地址指針,然後再從堆內存中取得所需的數據;
var s='str',t= 0,floatNum=1.1; var obj={ a:10, b:'Joel', c:function(){ console.log('function'); } }
如上圖所示:
基本資料類型值是保存在堆疊中,引用類型的物件參考是保存在堆疊中,值是保存在堆中;
總結
聲明變數時不同的記憶體分配:
基本類型:儲存在堆疊(stack)中的簡單資料段,它們的值直接儲存在變數存取的位置。這是因為基本類型佔據的空間是固定的,所以可將他們儲存在較小的記憶體區域 – 堆疊中,這樣儲存便於迅速查詢變數的值。
引用類型:儲存在堆疊(heap)中的對象,儲存在堆疊中的值是一個指針(point)用於指向儲存對象的記憶體位址,這是因為引用類型值的大小會改變,所以不能把它放在堆疊中,否則會降低變數查尋的速度。相反存在堆疊中的值是該物件位址而位址的大小是固定的,所以把它儲存在堆疊中對變數效能無任何影響。
不同的記憶體分配機制也帶來了不同的存取機制
在javascript中是不允許直接存取保存在堆記憶體中的物件的,所以在存取一個物件時,首先訪問記憶體堆疊得到這個物件在記憶體堆中的位址,然後再按照這個位址去獲得這個物件中的值,這就是傳說中的按引用訪問,而基本型別的值則是直接記憶體棧中。
複製變數時的不同
基本類型:在將一個保存著原始值的變數複製給另一個變數時,會將原始值的副本賦值給新變量,此後這兩個變數是完全獨立的,他們只是擁有相同的value而已。
引用類型:在將一個保存著物件記憶體位址的變數複製給另一個變數時,會把這個記憶體位址賦值給新變量,也就是說這兩個變數都指向了堆記憶體中的同一個對象,他們中任何一個人所做的改變都會反映在另一個身上。 (這裡要理解的一點就是,複製對象時並不會在堆內存中新生成一個一模一樣的對象,只是多了一個保存指向這個對象指針的變量)多了一個指針。
參數傳遞的不同(把實參複製給形參的過程)
ECMAScript中所有函數的參數都是按值來傳遞的,但是為什麼涉及到原始類型與引用類型的值時仍然有差別呢?還不就是因為記憶體分配時的差別。
基本資料型態:只是把變數裡的值複製一個副本然後傳遞給參數,之後參數和這個變數互不影響。
引用型別:因為它傳遞的值是記憶體位址,所以都是指向同一個物件;
以上是關於js中基本資料型別、引用資料型別區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

隨著短影片平台的盛行,影片矩陣帳號行銷已成為一種新興行銷方式。透過在不同平台上建立和管理多個帳號,企業和個人能夠實現品牌推廣、粉絲成長和產品銷售等目標。本文將為您探討如何有效運用視訊矩陣帳號,並介紹不同類型的視訊矩陣帳號。一、視訊矩陣帳號怎麼做?要做好視訊矩陣帳號,需要遵循以下幾個步驟:首先要明確你的影片矩陣帳號的目標是什麼,是為了品牌傳播、粉絲成長還是產品銷售。明確目標有助於制定相應的策略。 2.選擇平台:根據你的目標受眾,選擇合適的短影片平台。目前主流的短視頻平台有抖音、快手、火山小影片等。

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

C++中的函數傳回參考類型的好處包括:效能提升:引用傳遞避免了物件複製,從而節省了記憶體和時間。直接修改:呼叫方可以直接修改傳回的參考對象,而無需重新賦值。程式碼簡潔:引用傳遞簡化了程式碼,無需額外的賦值操作。

C++中引用和指標都是傳遞函式參數的方法,但有差別。引用是變數的別名,修改引用會修改原始變量,而指標儲存變數的位址,修改指標值不會修改原始變數。在選擇使用引用還是指標時,需要考慮是否需要修改原始變數、是否需要傳遞空值和效能考量等因素。

JavaScript中的HTTP狀態碼取得方法簡介:在進行前端開發中,我們常常需要處理與後端介面的交互,而HTTP狀態碼就是其中非常重要的一部分。了解並取得HTTP狀態碼有助於我們更好地處理介面傳回的資料。本文將介紹使用JavaScript取得HTTP狀態碼的方法,並提供具體程式碼範例。一、什麼是HTTP狀態碼HTTP狀態碼是指當瀏覽器向伺服器發起請求時,服務
