1. 程式人生 > >每天學習一點ES6(二)let 和 const

每天學習一點ES6(二)let 和 const

# let 命令 let 和 var 差不多,只是限制了有效範圍。 ## 先定義後使用 不管是什麼程式語言,不管語法是否允許,都要秉承先定義,然後再使用的習慣,這樣不會出么蛾子。以前JavaScript比較隨意,可以不定義直接使用,這樣很容易亂,let 就要嚴格一些,let定義的變數,在定義之前是不可以用的,會報錯。 ```js console.log(v) var v = 1; console.log(a) let a = 1; ``` 執行結果: ![](https://img2020.cnblogs.com/blog/17148/202012/17148-20201224132454647-924178147.png) var定義的變數不會報錯,但是let定義的變數會報錯。let更加的嚴謹。 ## let 的有效範圍 let 只在程式碼塊內部有效。我們舉個例子來區分一下 ```js function test() { let arr = [1,2,3] for (var i = 0; i 如果不能改型別的話,可以使用const 來定義。 # const 命令 const 宣告一個只讀的常量,一旦宣告,常量的值就不能改變。 ## 只讀常量嗎? 看vue的程式碼裡面,各種const定義的物件,哪個也不像不能改的呀。 其實這裡不能改,指的是“地址(裡的指標)”不能改。 只要保證地址不變,地址(裡的指標)對應的內容是可以隨意的。 那麼具體怎麼區分呢? * 先來看看簡單型別 ```js const aa = 1; console.log(aa) // aa = 2; // 報錯 console.log(aa) // ``` 執行結果: ![](https://img2020.cnblogs.com/blog/17148/202012/17148-20201224131107593-1655295654.png) 修改簡單型別的值的時候會報錯。 * 再來看看陣列的情況 ```js const arr = [1,2,3] console.log(arr) // [1, 2, 3] arr.push(5) console.log(arr) // [1, 2, 3, 5] arr[0] = 111 console.log(arr) // [111, 2, 3, 5] const arr2 = [4,5,...arr] console.log(arr2) // [4, 5, 111, 2, 3, 5] const arr3 = [7,8] // 7,8 被覆蓋 Object.assign(arr3, arr) console.log(arr3) // [111, 2, 3, 5] const arr4 = [7,8] // arr4 = [...arr] // 報錯 console.log(arr4) // arr = [7,8,9] // 報錯 console.log(arr) // ``` 執行結果如下: ![](https://img2020.cnblogs.com/blog/17148/202012/17148-20201224134626701-328284482.png) 陣列自帶的各種函式都是可以執行的,不會報錯,但是直接給陣列賦值就不行了。因為前者沒有改變地址,只是在地址裡面增加了新的資料,而後者是改了一個新的地址。 * 再看看物件的情況 ```js const foo = {title: '我是標題'} console.log(foo) // foo.name = '新名稱' console.log(foo) // 可以修改屬性值 foo.title = '新標題' console.log(foo) // 可以增加屬性 Object.assign(foo, {age:65}) console.log(foo) // 合併物件 foo = {newTitle: '這個就不行了'} // 報錯 ``` 執行結果: ![](https://img2020.cnblogs.com/blog/17148/202012/17148-20201224142439369-1259834784.png) 只要地址(裡的指標)沒變,那麼就可以隨心所欲了。 # 參考書目 《ES6 標準入門