最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

我們先切記這一點先,看下文?。?!

js中變量的兩種類型

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

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

    Number

    String

    Boolean

    Undefined

    null

    symbol

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

    Object

    Array

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

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

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

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

簡單類型變量的存儲

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

它是存儲在棧中而已

以下是的示例定義

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

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

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

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

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

復雜類型變量的存儲

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

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

比如

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

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

那這又是為什么 ? 看下面

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

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

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

主要原因是:

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

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

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

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

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

相關(guān)文章

  • Javascript實現(xiàn)簡易天數(shù)計算器

    Javascript實現(xiàn)簡易天數(shù)計算器

    這篇文章主要為大家詳細介紹了Javascript實現(xiàn)簡易天數(shù)計算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • js實現(xiàn)鼠標滑動到某個div禁止?jié)L動

    js實現(xiàn)鼠標滑動到某個div禁止?jié)L動

    這篇文章主要為大家詳細介紹了js實現(xiàn)鼠標滑動到某個div禁止?jié)L動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • 詳解TypeScript中type與interface的區(qū)別

    詳解TypeScript中type與interface的區(qū)別

    在寫 ts 相關(guān)代碼的過程中,總能看到 interface 和 type 的身影。它們的作用好像都一樣的,相同的功能用哪一個都可以實現(xiàn),也都很好用,所以也很少去真正的理解它們之間到底有啥區(qū)別,因此本文將詳細講解二者的區(qū)別,需要的可以參考一下
    2022-04-04
  • Layui 解決表格異步調(diào)用后臺分頁的問題

    Layui 解決表格異步調(diào)用后臺分頁的問題

    今天小編就為大家分享一篇Layui 解決表格異步調(diào)用后臺分頁的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • 詳解js location.href和window.open的幾種用法和區(qū)別

    詳解js location.href和window.open的幾種用法和區(qū)別

    這篇文章主要介紹了詳解js location.href和window.open的幾種用法和區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • uniapp中解析markdown支持網(wǎng)頁和小程序?qū)崿F(xiàn)示例

    uniapp中解析markdown支持網(wǎng)頁和小程序?qū)崿F(xiàn)示例

    這篇文章主要為大家介紹了uniapp中解析markdown支持網(wǎng)頁和小程序?qū)崿F(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • JavaScript學習筆記之ES6數(shù)組方法

    JavaScript學習筆記之ES6數(shù)組方法

    ES6給數(shù)組添加了一些新特性,而這些新特性到目前為止完全可以運用到自己的業(yè)務(wù)層。在這一節(jié)中將總結(jié)有關(guān)于ES6給數(shù)組提供一些新特性的使用方法
    2016-03-03
  • JavaScript this關(guān)鍵字指向常用情況解析

    JavaScript this關(guān)鍵字指向常用情況解析

    這篇文章主要介紹了JavaScript this關(guān)鍵字指向常用情況解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • uniapp?H5遮罩層、彈窗以及蒙層滾動穿透/滑動穿透解決辦法

    uniapp?H5遮罩層、彈窗以及蒙層滾動穿透/滑動穿透解決辦法

    最近用uin-app做項目遇到了不少問題,下面這篇文章主要給大家介紹了關(guān)于uniapp?H5遮罩層、彈窗以及蒙層滾動穿透/滑動穿透的解決辦法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • Javascript 鏈式作用域詳細介紹

    Javascript 鏈式作用域詳細介紹

    這篇文章主要介紹了Javascript 鏈式作用域詳細介紹的相關(guān)資料,需要的朋友可以參考下
    2017-02-02

最新評論

海门市| 镇沅| 汉寿县| 陆丰市| 班玛县| 察雅县| 高要市| 胶州市| 上栗县| 红安县| 尖扎县| 广安市| 杭州市| 永新县| 庆安县| 维西| 新宁县| 河源市| 孟村| 大关县| 美姑县| 陆川县| 于田县| 淮阳县| 阳山县| 建始县| 文化| 临高县| 简阳市| 文登市| 永州市| 中牟县| 吴江市| 迁安市| 贺州市| 凌源市| 平乐县| 永嘉县| 阿瓦提县| 广宗县| 浙江省|