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

JS中const對(duì)于復(fù)雜類(lèi)型變量和普通類(lèi)型變量的區(qū)別詳解

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

const關(guān)鍵字是讓什么不能變?

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

我們先切記這一點(diǎn)先,看下文?。?!

js中變量的兩種類(lèi)型

js中的變量類(lèi)型可以分為兩種:

  • 簡(jiǎn)單數(shù)據(jù)類(lèi)型

    Number

    String

    Boolean

    Undefined

    null

    symbol

  • 復(fù)雜數(shù)據(jù)類(lèi)型(下面我都稱為對(duì)象)

    Object

    Array

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

兩種類(lèi)型的的存儲(chǔ)區(qū)別

都是兩種數(shù)據(jù)結(jié)構(gòu),靠他們來(lái)給變量分配使用內(nèi)存

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

簡(jiǎn)單類(lèi)型變量的存儲(chǔ)

這種類(lèi)型的變量我們是用得最多的

它是存儲(chǔ)在棧中而已

以下是的示例定義

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

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

其中變量的值存儲(chǔ)在變量指向的棧中的內(nèi)存地址上,看上圖,100就是存儲(chǔ)在內(nèi)存地址上

結(jié)合上面所說(shuō)的const的作用就知道為什么const關(guān)鍵字定義的簡(jiǎn)單類(lèi)型的變量的值不能變,因?yàn)?strong>改變其變量的值是直接改變變量指向的內(nèi)存上的數(shù)據(jù),這是const關(guān)鍵字不允許的

那為什么復(fù)雜類(lèi)型的又可以呢,看下文

復(fù)雜類(lèi)型變量的存儲(chǔ)

先說(shuō)一下,復(fù)雜類(lèi)型的值的更改指的是

復(fù)雜類(lèi)型變量里屬性可以更改,整個(gè)對(duì)象的更改const關(guān)鍵字是不允許的!??!

比如

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

如果需要替換整個(gè)對(duì)象,const關(guān)鍵字是不允許的,但是屬性值的更改是可以的

那這又是為什么 ? 看下面

我們先要記住const關(guān)鍵字是不允許更改變量的哪個(gè)地方,是變量在棧中存儲(chǔ)變量值的內(nèi)存地址上的值

對(duì),沒(méi)錯(cuò) !??!這也是普通變量值不能更改的原因

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

主要原因是:

復(fù)雜變量的值不是存儲(chǔ)在棧中,而是存儲(chǔ)在堆里,復(fù)雜變量在棧中內(nèi)存上的值是指向存儲(chǔ)該復(fù)雜類(lèi)型變量值的堆上的地址

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

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

這也是為什么會(huì)有對(duì)象的淺拷貝和深拷貝的原因,因?yàn)槟惆岩粋€(gè)對(duì)象直接賦值給另一個(gè)對(duì)象,準(zhǔn)確來(lái)說(shuō)是把對(duì)象變量在棧中的存儲(chǔ)的指向改變了,指向了同一個(gè)在堆里存儲(chǔ)的數(shù)據(jù),所以你改變其中一個(gè)變量的值,會(huì)造成其堆上存儲(chǔ)的數(shù)據(jù)改變,所以另外一個(gè)對(duì)象的值也會(huì)改變,這就是為啥會(huì)有淺拷貝?。。?/p>

以上就是JS中const對(duì)于復(fù)雜類(lèi)型變量和普通類(lèi)型變量的區(qū)別詳解的詳細(xì)內(nèi)容,更多關(guān)于JS const復(fù)雜類(lèi)型和普通類(lèi)型變量區(qū)別的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Javascript 學(xué)習(xí)書(shū) 推薦

    Javascript 學(xué)習(xí)書(shū) 推薦

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

    js中最容易被忽視的事件問(wèn)題大總結(jié)

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

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

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

    Echarts圖表位置調(diào)整的圖文教程

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

    Aptana調(diào)試javascript圖解教程

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

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

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

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

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

    JavaScript function 的 length 屬性使用介紹

    函數(shù)的 length 得到的是形參個(gè)數(shù),如果函數(shù)內(nèi)部是通過(guò)arguments 調(diào)用參數(shù),而沒(méi)有實(shí)際定義參數(shù)的話, length 只會(huì)的得到0
    2014-09-09
  • javascript根據(jù)像素點(diǎn)取位置示例

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

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

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

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

最新評(píng)論