欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS中const對于復雜類型變量和普通類型變量的區(qū)別詳解

 更新時間:2023年11月05日 08:38:45   作者:悲傷周杰倫  
我們在開發(fā)的過程中一定常常發(fā)現(xiàn)const關鍵字定義的簡單類型變量不可以改變,但是你如果定義的是一個復雜類型變量(比如對象)的話對里面屬性的增刪改查是可以的,那這又是為什么呢,接下來就來和小編一起探討一下吧

const關鍵字是讓什么不能變?

const實際上的不能變并不是說變量的值不能變,而是初始化后變量所指向在棧中的內存上的數(shù)據(jù)不能變

我們先切記這一點先,看下文?。。?/strong>

js中變量的兩種類型

js中的變量類型可以分為兩種:

  • 簡單數(shù)據(jù)類型

    Number

    String

    Boolean

    Undefined

    null

    symbol

  • 復雜數(shù)據(jù)類型(下面我都稱為對象)

    Object

    Array

    Function(函數(shù)實際上是對象)

兩種類型的的存儲區(qū)別

都是兩種數(shù)據(jù)結構,靠他們來給變量分配使用內存

js的兩種數(shù)據(jù)類型的變量即是存儲在堆和棧中

簡單類型變量的存儲

這種類型的變量我們是用得最多的

它是存儲在棧中而已

以下是的示例定義

var num=100
var bool=false
var str='字符串

而他在棧中的存儲可以形象比喻為這樣子

其中變量的值存儲在變量指向的棧中的內存地址上,看上圖,100就是存儲在內存地址上

結合上面所說的const的作用就知道為什么const關鍵字定義的簡單類型的變量的值不能變,因為改變其變量的值是直接改變變量指向的內存上的數(shù)據(jù),這是const關鍵字不允許的

那為什么復雜類型的又可以呢,看下文

復雜類型變量的存儲

先說一下,復雜類型的值的更改指的是

復雜類型變量里屬性可以更改,整個對象的更改const關鍵字是不允許的?。?!

比如

const ob={
a:100,
b:200
}
const ob1={
c:100
}
ob.a=200         //   successful ! ! !
ob=ob1           //   fail ! ! !

如果需要替換整個對象,const關鍵字是不允許的,但是屬性值的更改是可以的

那這又是為什么 ? 看下面

我們先要記住const關鍵字是不允許更改變量的哪個地方,是變量在棧中存儲變量值的內存地址上的值

對,沒錯 ?。?!這也是普通變量值不能更改的原因

但是為什么復雜變量的可以更改呢,但是不可以替換呢

主要原因是:

復雜變量的值不是存儲在棧中,而是存儲在堆里,復雜變量在棧中內存上的值是指向存儲該復雜類型變量值的堆上的地址

如果這句話看不懂的話,可以看下圖

所以更改對象的屬性值是更改在堆上的值,而替換對象則是要更改存儲在棧中內存地址上變量在堆上存儲數(shù)據(jù)的地址值,而這個更改恰恰是const關鍵字不允許的?。?!

這也是為什么會有對象的淺拷貝和深拷貝的原因,因為你把一個對象直接賦值給另一個對象,準確來說是把對象變量在棧中的存儲的指向改變了,指向了同一個在堆里存儲的數(shù)據(jù),所以你改變其中一個變量的值,會造成其堆上存儲的數(shù)據(jù)改變,所以另外一個對象的值也會改變,這就是為啥會有淺拷貝!??!

以上就是JS中const對于復雜類型變量和普通類型變量的區(qū)別詳解的詳細內容,更多關于JS const復雜類型和普通類型變量區(qū)別的資料請關注腳本之家其它相關文章!

相關文章

  • Javascript 學習書 推薦

    Javascript 學習書 推薦

    前一段時間看了一本javascript的書,書名為Javascript DOM 高級程序設計 由【加】Jeffrey Sambells和【美】
    2009-06-06
  • js中最容易被忽視的事件問題大總結

    js中最容易被忽視的事件問題大總結

    下面小編就為大家?guī)硪黄猨s中最容易被忽視的事件問題大總結。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考,一起跟隨小編過來看看吧,祝大家游戲愉快哦
    2016-05-05
  • JS定時器如何實現(xiàn)提交成功提示功能

    JS定時器如何實現(xiàn)提交成功提示功能

    這篇文章主要介紹了JS定時器如何實現(xiàn)提交成功提示功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Echarts圖表位置調整的圖文教程

    Echarts圖表位置調整的圖文教程

    實際過程中你會發(fā)現(xiàn)圖表在div中的位置不太理想,這時怎么去調整呢?下面這篇文章主要給大家介紹了關于Echarts圖表位置調整的相關資料,需要的朋友可以參考下
    2022-10-10
  • Aptana調試javascript圖解教程

    Aptana調試javascript圖解教程

    用Aptana軟件來調試javascript的方法,一般情況下大家都使用firefox瀏覽器+firebug來調試的。
    2009-11-11
  • BootStrap Progressbar 實現(xiàn)大文件上傳的進度條的實例代碼

    BootStrap Progressbar 實現(xiàn)大文件上傳的進度條的實例代碼

    這篇文章主要介紹了BootStrap Progressbar 實現(xiàn)大文件上傳的進度條的實例代碼的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • js防止表單重復提交實現(xiàn)代碼

    js防止表單重復提交實現(xiàn)代碼

    重復提交、重復刷新、防止后退等等都是屬于系統(tǒng)為避免重復記錄而需要解決的問題,在客戶端去處理需要針對每一種的可能提出相應的解決方案,然而在服務器端看來只不過是對于數(shù)據(jù)真實性的檢驗問題
    2012-09-09
  • JavaScript function 的 length 屬性使用介紹

    JavaScript function 的 length 屬性使用介紹

    函數(shù)的 length 得到的是形參個數(shù),如果函數(shù)內部是通過arguments 調用參數(shù),而沒有實際定義參數(shù)的話, length 只會的得到0
    2014-09-09
  • javascript根據(jù)像素點取位置示例

    javascript根據(jù)像素點取位置示例

    這篇文章主要介紹了javascript根據(jù)像素點取位置的示例,大家參考使用吧
    2014-01-01
  • 微信小程序使用setData修改數(shù)組中單個對象的方法分析

    微信小程序使用setData修改數(shù)組中單個對象的方法分析

    這篇文章主要介紹了微信小程序使用setData修改數(shù)組中單個對象的方法,結合具體實例形式分析了setData進行數(shù)組修改的相關操作技巧與注意事項,需要的朋友可以參考下
    2018-12-12

最新評論