From 218934fa2ed1c702a6d3923d2aa2cc6b43c48684 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:43:23 -0500 Subject: initial commit --- .../reference/statements/const/index.html | 129 +++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 files/zh-tw/web/javascript/reference/statements/const/index.html (limited to 'files/zh-tw/web/javascript/reference/statements/const/index.html') diff --git a/files/zh-tw/web/javascript/reference/statements/const/index.html b/files/zh-tw/web/javascript/reference/statements/const/index.html new file mode 100644 index 0000000000..831a69155c --- /dev/null +++ b/files/zh-tw/web/javascript/reference/statements/const/index.html @@ -0,0 +1,129 @@ +--- +title: const +slug: Web/JavaScript/Reference/Statements/const +translation_of: Web/JavaScript/Reference/Statements/const +--- +
{{jsSidebar("Statements")}}
+ +
Constants (常數) 有點像使用 let 所宣告的變數,具有區塊可視範圍。常數不能重複指定值,也不能重複宣告。
+ +
{{EmbedInteractiveExample("pages/js/statement-const.html")}}
+ + +

語法

+ +
const name1 = value1 [, name2 = value2 [, ... [, nameN = valueN]]];
+ +
+
nameN
+
常數的名稱,可以是任何合法的 {{Glossary("identifier")}}。
+
valueN
+
常數的值,可以是任何合法的 expression, 包括 function expression。
+
+ +

描述

+ +

上述宣告建立一個常數,它的可視範圍可能是全域的,或是在它所宣告的區域區塊中。 和 var 變數不同的是,全域的常數不會變成 window 物件的屬性。常數必須要初始化;也就是說,你必須在宣告常數的同一個敘述式中指定這個常數的值。(這很合理,因為稍後就不能再變更常數的值了)

+ +

宣告 const 會對於它的值建立一個唯讀的參考。並不是說這個值不可變更,而是這個變數不能再一次指定值。例如,假設常數的內容(值)是個物件,那麼此物件的內容(物件的參數)是可以更改的。

+ +

所有關於 "temporal dead zone" 的狀況,都適用於 let and const

+ +

在相同的可視範圍內,常數不能和函數,變數具有相同名稱。

+ +

範例

+ +

以下範例展示常數的行為。請在你的瀏覽器中試試以下程式碼。

+ +
// 注意: 常數可以宣告成大寫或小寫,
+// 但習慣上使用全部大寫的字母。
+
+// 定義一個常數 MY_FAV 並賦予它的值為7
+const MY_FAV = 7;
+
+// 這裡會發生錯誤 - Uncaught TypeError: Assignment to constant variable.
+MY_FAV = 20;
+
+// MY_FAV 是 7
+console.log('我喜歡的數字是: ' + MY_FAV);
+
+// 嘗試重複宣告同名的常數,將會發生錯誤 -  Uncaught SyntaxError: Identifier 'MY_FAV' has already been declared
+const MY_FAV = 20;
+
+// MY_FAV 這個名稱已經保留給上面的常數, 所以這裡也會錯誤。
+var MY_FAV = 20;
+
+// 這式子也會錯誤
+let MY_FAV = 20;
+
+// 很重要,請注意區塊可視範圍的特性。
+if (MY_FAV === 7) {
+    // 以下式子沒有問題,並且會建立一個名叫 MY_FAV 的具有區塊可視範圍的變數。
+    // (等同於使用 let 來宣告一個具有區塊可視範圍的非常數變數。)
+    let MY_FAV = 20;
+
+    // MY_FAV 現在變成 20
+    console.log('我喜歡的數字是:' + MY_FAV);
+
+    // 這會將變數懸掛於全域,而導致錯誤。(與常數同名)
+    var MY_FAV = 20;
+}
+
+// MY_FAV 仍然是 7
+console.log('我喜歡的數字是:' + MY_FAV);
+
+// 發生錯誤 - Uncaught SyntaxError: Missing initializer in const declaration
+const FOO;
+
+// 常數的值可以是一個物件
+const MY_OBJECT = {'key': 'value'};
+
+// 嘗試覆寫該物件將會發生錯誤 - Uncaught TypeError: Assignment to constant variable.
+MY_OBJECT = {'OTHER_KEY': 'value'};
+
+// 然而, 物件的屬性並沒有被保護,
+// 所以,以下敘述式沒有問題。
+MY_OBJECT.key = 'otherValue'; // Use Object.freeze() to make object immutable
+
+// 對陣列來說也是一樣
+const MY_ARRAY = [];
+// 可以把項目加到陣列中。
+MY_ARRAY.push('A'); // ["A"]
+// 然而,對這個變數指定新陣列,將會發生錯誤 - Uncaught TypeError: Assignment to constant variable.
+MY_ARRAY = ['B'];
+ +

規範

+ + + + + + + + + + + + + + + + + + + +
規範狀態註解
{{SpecName('ES2015', '#sec-let-and-const-declarations', 'Let and Const Declarations')}}{{Spec2('ES2015')}}初始化定義.
{{SpecName('ESDraft', '#sec-let-and-const-declarations', 'Let and Const Declarations')}}{{Spec2('ESDraft')}}沒有改變.
+ +

瀏覽器相容性

+ + + +

{{Compat("javascript.statements.const")}}

+ +

參閱

+ + -- cgit v1.2.3-54-g00ecf