日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第三节:ES6中另一个不得不说的关键字const

發布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第三节:ES6中另一个不得不说的关键字const 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????????之前感覺在微信上看含有代碼的文章體驗很差,特別是閱讀代碼的時候,這次我給代碼部分著色了,希望大家能看得舒服點;還有配上了圖,更有趣好玩了,堅持一個宗旨:相信編程講課可以更通俗易懂、更有趣。也歡迎大家積極互動。

????????上一節講了let關鍵字,它是用來聲明一個變量,只在塊級作用域起作用。這一節我們來學習ES6新增的另一個關鍵字const。

const 的作用

????????const是constant(常量)的縮寫,const和 let一樣,也是用來聲明變量的,但是const是專門用于聲明一個常量的,顧名思義,常量的值是不可改變的。以前用var聲明的變量,想怎么改就怎么改,同一個變量,后面的值可以輕松覆蓋原來的值,這次const聲明的變量,可由不得我們這么任性地想改就改了。

常量的特點

1、不可修改


? ?const Name = '張三';
? ?Name = '李四';//錯誤,企圖修改常量Name

2、只在塊級作用域起作用,這點與let關鍵字一樣。

? ?
? ?if(1){
? ? ? const Name = '張三';
? ? }
? ?alert(Name);//錯誤,在代碼塊{ }外,Name失效

?

3、不存在變量提升,必須先聲明后使用,這點也跟let關鍵字一樣。

???
??? if(1){
??????? alert(Name);//錯誤,使用前未聲明
??????? const Name = '張三';
??? }
???

4、不可重復聲明同一個變量,這點跟let也一樣。


? ?var Name ?= '張三';
? ?const ?Name = '李四';//錯誤,聲明一個已經存在的變量Name

5、聲明后必須要賦值

?
? ?const NAME; //錯誤,只聲明不賦值

??????

????????以上這些小知識點都比較簡單,不用舉生活上的例子都可以理解,也不難記住。

如果常量是一個對象呢?

我們接著看下面這段小代碼:


? ?const Person = {"name":"張三"};
? ?Person.name = "李四";
? ?Person.age = 20;
? ?console.log(Person);
? ?//結果:正常輸出{name: "李四", age: 20}

?????????咦?怎么常量Person好像被修改了,name改成了“李四”,而且還添加了age屬性,值為20;怎么沒有報錯,還正常輸出,不是說好了常量不可修改嗎,友誼小船說翻就翻了,說好的常量說變就變,別怕,友誼還是很牢固的。

????????我們一起來找找原因。

傳址賦值

????????這個時候,我們先引入一個概念:在賦值過程中,我們可以分為傳值賦值和傳址賦值。這里我們用到了傳址賦值,什么叫傳址賦值?

傳址:在賦值過程中,變量實際上存儲的是數據的地址(對數據的引用),而不是原始數據或者數據的拷貝。

新手看不懂上面這段話,沒關系的,看段代碼:


? ?var student1 = {"name":"張三"};
? ?var student2 = student1;
? ?student2.name = "李四";
? ?console.log(student1);
? ?//結果:輸出 {name: "李四"}
? ?console.log(student2);
? ?//結果:輸出 {name: "李四"}

????????為什么student2的name改成了“李四”,student1的那么也變成了“李四”呢?這就是傳址賦值!

????????怎么理解傳址賦值?就好比,你預約了一個裝修工(張師傅)到你家進行裝修,你把你家的地址告訴了他,他順著地址來到你家,按照你的要求,把你家的門弄成紅色。


????????僅僅過了兩天,你覺得不好看,你又找了另一個裝修工(王師傅),你也把地址告訴他,王師傅來到后也是按照你的要求,把門弄成了綠色。


????????最后,不管是張師傅還是王師傅,通過這個地址來到你家的時候,看到的門肯定是綠色的,因為最后一次修改是改成綠色。

????????看懂這個生活上的的例子,你就看得懂下面這段代碼了:


? ?//張師傅把你家的門改成紅色
? ?var Zhang = {"door":"red"};

? ?//次日,你把地址也告訴了王師傅
? ?var Wang = Zhang;

? ?//王師傅按照地址,去到后把門改成綠色
? ?Wang.door = "green";

? ?//最后不管是張師傅還是王師傅來到你家,看到門都是綠色的
? ?console.log(Wang); //結果:輸出 {door: "green"}
? ?console.log(Zhang); //結果:輸出 {door: "green"}

? ? ? ? 仔細對比一下,這段代碼和上一段小代碼的結構一模一樣(往上翻一下看看),這就知道為什么student2改了name,student1也被修改了。

????????花了不少篇幅來講傳址賦值,希望這個例子能形象地描述出傳址賦值,讓大家易懂和透徹。

????????講完傳址賦值,回到我們的const關鍵字,用const來聲明一個對象類型的常量,就是傳址賦值。而不可修改的是對象在內存中的地址,而不是對象本身(不可變的是你家的地址,而不是你家的門)。

????????所以,這就很好的解釋剛剛的這段代碼為什么不會報錯,而是正常輸出了。


? ?const Person = {"name":"張三"};
? ?Person.name = "李四";
? ?Person.age = 20;
? ?console.log(Person);
? ?//結果:正常輸出{name: "李四", age: 20}

因為修改的只是Person本身,修改的是name屬性和增加一個屬性age,而地址沒變,也不可變,所以并沒有違背常量不可修改的約定。

但是,如果這樣寫呢,就會報錯:


? ?const Person = {"name":"張三"};
? ?Person.age = 20;
? ?Person = {};?
? ?//錯誤,企圖給常量Person賦新值(新地址)

????????用const聲明后,張師傅、王師傅就只認得你家的地址了,不能再告訴他其他家的地址。

????????const關鍵字的學習到此就結束了,是不是發現并不難學,大部分特性都跟let的相同,但記住聲明一個對象作為常量的時候要小心。此外附帶講解了傳址賦值的概念,裝修工的例子還算貼切,圖文并茂,比較形象地描述傳址賦值。

本節總結

總結:const也是用于聲明一個常量,并必須賦值,聲明后不可修改,跟let一樣,只在塊級作用域起作用,不可重復聲明同一個變量,不會變量提升,聲明引用類型的常量時,要注意是傳址賦值。

總結

以上是生活随笔為你收集整理的第三节:ES6中另一个不得不说的关键字const的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。