Es6系列--const
const是用來定義常量,一旦聲明,其值就不能改變
const聲明的常量不得改變值。這意味著,const一旦聲明常量,就必須立即初始化,不能留到最後賦值。
const的作用域與let相同:只在聲明所在的塊級作用域內有效
const變量也不會提升,同樣也存在暫時性死區,只能在聲明後使用。
與let一樣,const也不可以重復聲明變量。
對於復合類型的變量,變量名不指向數據,而是指向數據所在的地址。const命令只是保證變量名指向的地址不變,並不保證該地址的數據不變,所以將一個對象聲明為常量必須非常小心
這句話的意思就是
這樣寫不會有問題但你要這樣寫就會出錯
上面的代碼常量foo儲存的是一個地址,指向一個對象。不可變的只是這個地址,既不能將foo指向另一個地址但對象本身是可變的,所以依然能為其添加新屬性。
下面是另一個例子
上面的代碼中,常量a是一個數組,這個數組本身是可寫的,但如果將另一個數組賦值給a,就會報錯
Es6系列--const
相關推薦
Es6系列--const
nbsp 個數 作用域 可變 bubuko 數組賦值 ima 代碼 指向 const是用來定義常量,一旦聲明,其值就不能改變 const聲明的常量不得改變值。這意味著,const一旦聲明常量,就必須立即初始化,不能留到最後賦值。 const的作用域與let相同:只
ES6系列一 let const
聲明變量 系列 ++ tor 代碼塊 spa com 屬性 否則 一丶let 1.使用let聲明一個變量,會生成一個獨立的作用域,比var的作用域更為嚴謹,比如for循環 var a = []; for (var i = 0; i < 10; i++) { a[i
ES6系列之變數宣告let const
ES6也出來好久了,最近閒來無事就想著吧es6做一個系統的總結,鞏固自己的知識,豐富一下部落格. 為什麼叫ES6 實際上是ECMA的一個打的標準,這個標準是在2015年6月釋出的,正式的名字實際是es2015,ecma這個組織規定每年6月份對這個版本進行更新,所以有es2016,es2017,es20
[js高手之路] es6系列教程 - Map詳解以及常用api
.com size style 系列教程 image clear rsquo images div ECMAScript 6中的Map類型是一種存儲著許多鍵值對的有序列表。鍵值對支持所有的數據類型. 鍵 0 和 ‘0’會被當做兩個不同的鍵,不會發生強
[js高手之路] es6系列教程 - 叠代器,生成器,for...of,entries,values,keys等詳解
== 我會 item 獲取 prot ron 原型對象 檢測 ges 接著上文[js高手之路] es6系列教程 - 叠代器與生成器詳解繼續. 在es6中引入了一個新的循環結構for ....of, 主要是用來循環可叠代的對象,那麽什麽是可叠代的對象呢? 可叠代的對象一
Es6系列--let的用法
期望 可用 大神 圖片 技術分享 參考 沒有 ron 用法 基本用法: Es5只有全局作用域和函數作用域,沒有塊級作用域,這就帶來了很不合理的場景比如: 我們所期望的是能把var i = 11的值打印出來 Es6新增了let命令,let命令只能在它的代碼塊中有效,其
ES6 系列之 Babel 將 Async 編譯成了什麼樣子
前言 本文就是簡單介紹下 Async 語法編譯後的程式碼。 Async const fetchData = (data) => new Promise((resolve) => setTimeout(resolve, 1000, data + 1)) const fetchValue =
ES6新增const誤區
我們使用const宣告常量時,總認為值一旦宣告就不可改變,然後我發現在定義物件時,物件的值是可以改變的; 對於數值: var message = "Hello!"; let age = 25; // 以下兩行都會報錯 const message = "Goodbye!"; const ag
ES6 系列之 Babel 是如何編譯 Class 的(上)
前言 在瞭解 Babel 是如何編譯 class 前,我們先看看 ES6 的 class 和 ES5 的建構函式是如何對應的。畢竟,ES6 的 class 可以看作一個語法糖,它的絕大部分功能,ES5 都可以做到,新的 class 寫法只是讓物件原型的寫法更加清晰、更像面向物件程式設計的語法而已。 con
ES6 系列之 Babel 是如何編譯 Class 的(下)
前言 在上一篇 《 ES6 系列 Babel 是如何編譯 Class 的(上)》,我們知道了 Babel 是如何編譯 Class 的,這篇我們學習 Babel 是如何用 ES5 實現 Class 的繼承。 ES5 寄生組合式繼承 function Parent (name) { this.nam
ES6 系列之 defineProperty 與 proxy
前言 我們或多或少都聽過“資料繫結”這個詞,“資料繫結”的關鍵在於監聽資料的變化,可是對於這樣一個物件:var obj = {value: 1},我們該怎麼知道 obj 發生了改變呢? definePropety ES5 提供了 Object.defineProperty 方法,該方法可以在一個物件上定
ES6 系列之 Generator 的自動執行
單個非同步任務 var fetch = require('node-fetch'); function* gen(){ var url = 'https://api.github.com/users/github'; var result = yield fetch(url); c
ES6 系列之我們來聊聊 Promise
前言 Promise 的基本使用可以看阮一峰老師的 《ECMAScript 6 入門》。 我們來聊點其他的。 回撥 說起 Promise,我們一般都會從回撥或者回調地獄說起,那麼使用回撥到底會導致哪些不好的地方呢? 1. 回撥巢狀 使用回撥,我們很有可能會將業務程式碼寫成如下這種形式: doA(
ES6 系列之我們來聊聊裝飾器
Decorator 裝飾器主要用於: 裝飾類 裝飾方法或屬性 裝飾類 @annotation class MyClass { } function annotation(target) { target.annotated = true; } 複製程式碼 裝飾方法或屬性 cla
ES6 系列之私有變數的實現
前言 在閱讀 《ECMAScript 6 入門》的時候,零散的看到有私有變數的實現,所以在此總結一篇。 1. 約定 實現 class Example { constructor() { this._private = 'private'; } getName() { return thi
ES6系列_3之變數的解構賦值
ES6允許按照一定模式,從陣列和物件中提取值,對變數進行賦值,這被稱為解構。 解構有三種類型: 1.陣列的解構賦值 (1)簡單的陣列解構 以前,我們給變數賦值是直接單個指定值,比如: let a=0; let b=1; let c=2; 陣列解構的方式來進行賦值,如下: le
ES6系列_3之變量的解構賦值
方式 fin undefine efi mage 直接 的區別 pan ima ES6允許按照一定模式,從數組和對象中提取值,對變量進行賦值,這被稱為解構。 解構有三種類型: 1.數組的解構賦值 (1)簡單的數組解構 以前,我們給變量賦值是直接單個指定值,比如: let
ES6系列_2之新的聲明方式
style 我們 無法 使用 image 簡單 圖片 col 例子 在ES5中我們在聲明時只有一種方法,就是使用var來進行聲明,ES6對聲明的進行了擴展,現在可以有三種聲明方式。 (1)var:它是variable的簡寫,可以理解成變量的意思。 (2)let
ES6系列_4之擴充套件運算子和rest運算子
運算子可以很好的為我們解決引數和物件陣列未知情況下的程式設計,讓我們的程式碼更健壯和簡潔。 運算子有兩種:物件擴充套件運算子與rest運算子。 1.物件擴充套件( spread)運算子(...) (1)解決引數個數問題 以前我們程式設計是傳遞的引數一般是確定,否則將會報錯或者異常,如下:
ES6系列_5之字串模版
1.字串模板對比引入: (1).之前我們也可以使用JavaScript輸出模版字串,通常是下面這樣的: var restult= "姓名: <b>"+person.name+"</b>" 但是我們可以看到:這樣的傳統做法需要使用大量的“”(雙引號)和 + 來拼接才能得到