diff options
Diffstat (limited to 'files/zh-tw/web/javascript/reference/statements/const/index.html')
-rw-r--r-- | files/zh-tw/web/javascript/reference/statements/const/index.html | 129 |
1 files changed, 129 insertions, 0 deletions
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 +--- +<div>{{jsSidebar("Statements")}}</div> + +<div>Constants (常數) 有點像使用 <code><a href="/zh-TW/docs/Web/JavaScript/Reference/Statements/let">let</a></code> 所宣告的變數,具有區塊可視範圍。常數不能重複指定值,也不能重複宣告。</div> + +<div>{{EmbedInteractiveExample("pages/js/statement-const.html")}}</div> + + +<h2 id="語法">語法</h2> + +<pre class="syntaxbox">const <em>name1 = <em>value1 [</em>, <em>name2</em> = <em>value2</em><em> [</em>, ... [</em>, <em>nameN</em> = <em>valueN]]]</em>;</pre> + +<dl> + <dt><code>nameN</code></dt> + <dd>常數的名稱,可以是任何合法的 {{Glossary("identifier")}}。</dd> + <dt><code>valueN</code></dt> + <dd>常數的值,可以是任何合法的 <a href="/zh-TW/docs/Web/JavaScript/Guide/Expressions_and_Operators#Expressions">expression</a>, 包括 function expression。</dd> +</dl> + +<h2 id="描述">描述</h2> + +<p>上述宣告建立一個常數,它的可視範圍可能是全域的,或是在它所宣告的區域區塊中。 和 <code><a href="/zh-TW/docs/Web/JavaScript/Reference/Statements/var">var</a></code> 變數不同的是,全域的常數不會變成 window 物件的屬性。常數必須要初始化;也就是說,你必須在宣告常數的同一個敘述式中指定這個常數的值。(這很合理,因為稍後就不能再變更常數的值了)</p> + +<p>宣告 <strong><code>const</code></strong> 會對於它的值建立一個唯讀的參考。並不是說這個值不可變更,而是這個變數不能再一次指定值。例如,假設常數的內容(值)是個物件,那麼此物件的內容(物件的參數)是可以更改的。</p> + +<p>所有關於 "<a href="https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Statements/let#Temporal_dead_zone_and_errors_with_let">temporal dead zone</a>" 的狀況,都適用於 <code><a href="/zh-TW/docs/Web/JavaScript/Reference/Statements/let">let</a></code> and <code>const</code> 。</p> + +<p>在相同的可視範圍內,常數不能和函數,變數具有相同名稱。</p> + +<h2 id="範例">範例</h2> + +<p>以下範例展示常數的行為。請在你的瀏覽器中試試以下程式碼。</p> + +<pre class="brush:js">// 注意: 常數可以宣告成大寫或小寫, +// 但習慣上使用全部大寫的字母。 + +// 定義一個常數 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'];</pre> + +<h2 id="規範">規範</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">規範</th> + <th scope="col">狀態</th> + <th scope="col">註解</th> + </tr> + <tr> + <td>{{SpecName('ES2015', '#sec-let-and-const-declarations', 'Let and Const Declarations')}}</td> + <td>{{Spec2('ES2015')}}</td> + <td>初始化定義.</td> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-let-and-const-declarations', 'Let and Const Declarations')}}</td> + <td>{{Spec2('ESDraft')}}</td> + <td>沒有改變.</td> + </tr> + </tbody> +</table> + +<h2 id="瀏覽器相容性">瀏覽器相容性</h2> + +<div class="hidden">本頁面中的相容性表格是從結構性資料產生. 如果您像要提供資料,請先查看 <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> 並寄給我們取得的請求。</div> + +<p>{{Compat("javascript.statements.const")}}</p> + +<h2 id="參閱">參閱</h2> + +<ul> + <li><a href="/zh-TW/docs/Web/JavaScript/Reference/Statements/var"><code>var</code></a></li> + <li><a href="/zh-TW/docs/Web/JavaScript/Reference/Statements/let"><code>let</code></a></li> + <li><a href="/zh-TW/docs/Web/JavaScript/Guide/Values,_variables,_and_literals#Constants">Constants in the JavaScript Guide</a></li> +</ul> |