中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

es6如何聲明只讀常量

發布時間:2023-01-13 14:28:11 來源:億速云 閱讀:114 作者:iii 欄目:web開發

今天小編給大家分享一下es6如何聲明只讀常量的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

在es6中,可以使用const關鍵字來聲明只讀常量,語法“const 常量名 = 常量值;”;一旦聲明,常量必須進行初始化且初始化的值就不能改變。const聲明的常量屬于塊作用域,受到“暫存死區”的約束,不會在window上創建任何全局屬性,不可重新分配,不可重新聲明。

在es6中,可以使用const關鍵字來聲明只讀常量。

es6 const關鍵字

const聲明一個只讀的常量。一旦聲明,常量必須進行初始化且初始化的值就不能改變。

const PI = 3.1415;
PI // 3.1415

PI = 3;
// TypeError: Assignment to constant variable.

const 常量遵守以下規則:

  • 是屬于塊作用域的。

  • 受到“暫存死區”的約束。

  • 它不會在 window 上創建任何全局屬性。

  • 不可重新分配。

  • 不可重新聲明。

const一旦聲明變量,就必須立即初始化。

const foo;
// SyntaxError: Missing initializer in const declaration

上面代碼表示,對于const來說,只聲明不賦值,就會報錯。

const的作用域與let命令相同:只在聲明所在的塊級作用域內有效。

if (true) {
  const MAX = 5;
}

MAX // Uncaught ReferenceError: MAX is not defined

const命令聲明的常量也是不提升,同樣存在暫時性死區,只能在聲明的位置后面使用。

if (true) {
  console.log(MAX); // ReferenceError
  const MAX = 5;
}

上面代碼在常量MAX聲明之前就調用,結果報錯。

const聲明的常量,也與let一樣不可重復聲明。

var message = "Hello!";
let age = 25;

// 以下兩行都會報錯
const message = "Goodbye!";
const age = 30;

const本質

const實際上保證的,并不是變量的值不得改動,而是變量指向的那個內存地址所保存的數據不得改動。對于簡單類型的數據(數值、字符串、布爾值),值就保存在變量指向的那個內存地址,因此等同于常量。但對于復合類型的數據(主要是對象和數組),變量指向的內存地址,保存的只是一個指向實際數據的指針,const只能保證這個指針是固定的(即總是指向另一個固定的地址),至于它指向的數據結構是不是可變的,就完全不能控制了。因此,將一個對象聲明為常量必須非常小心。

const foo = {};

// 為 foo 添加一個屬性,可以成功
foo.prop = 123;
foo.prop // 123

// 將 foo 指向另一個對象,就會報錯
foo = {}; // TypeError: "foo" is read-only

上面代碼中,常量foo儲存的是一個地址,這個地址指向一個對象。不可變的只是這個地址,即不能把foo指向另一個地址,但對象本身是可變的,所以依然可以為其添加新屬性。

下面是另一個例子。

const a = [];
a.push('Hello'); // 可執行
a.length = 0;    // 可執行
a = ['Dave'];    // 報錯

上面代碼中,常量a是一個數組,這個數組本身是可寫的,但是如果將另一個數組賦值給a,就會報錯。

如果真的想將對象凍結,應該使用Object.freeze方法。

const foo = Object.freeze({});

// 常規模式時,下面一行不起作用;
// 嚴格模式時,該行會報錯
foo.prop = 123;

上面代碼中,常量foo指向一個凍結的對象,所以添加新屬性不起作用,嚴格模式時還會報錯。

除了將對象本身凍結,對象的屬性也應該凍結。下面是一個將對象徹底凍結的函數。

var constantize = (obj) => {
  Object.freeze(obj);
  Object.keys(obj).forEach( (key, i) => {
    if ( typeof obj[key] === 'object' ) {
      constantize( obj[key] );
    }
  });
};

以上就是“es6如何聲明只讀常量”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

es6
AI

丰都县| 安多县| 阿图什市| 周口市| 弥勒县| 大理市| 合阳县| 呼图壁县| 富民县| 项城市| 涞水县| 温泉县| 咸宁市| 双辽市| 邻水| 北京市| 南乐县| 合水县| 拜泉县| 曲靖市| 呈贡县| 达拉特旗| 桃江县| 黔西县| 乐东| 甘南县| 正蓝旗| 通河县| 自治县| 灵武市| 永寿县| 公安县| 乳山市| 新民市| 陵川县| 广西| 汉源县| 东安县| 正镶白旗| 西平县| 新平|