|
|
|
|
|
|
JavaScript有三種聲明方式:var,let,const,在本文中,將介紹如何使用這三種聲明方式,以及它們之間的區別。

聲明
聲明一個變量,可選初始化一個值。
聲明一個塊作用域的局部變量,可選初始化一個值。
聲明一個塊作用域的只讀常量。
聲明變量
你可以用以下三種方式聲明變量:
var 。例如 var x = 42。這個語法可以用來聲明局部變量和全局變量。x = 42。在函數外使用這種形式賦值,會產生一個全局變量。在嚴格模式下會產生錯誤。因此你不應該使用這種方式來聲明變量。let 。例如 let y = 13。這個語法可以用來聲明塊作用域的局部變量。參考下面變量的作用域。用 var 或 let 語句聲明的變量,如果沒有賦初始值,則其值為 undefined。
注意:像x = 42這種聲明方式將會創建一個未聲明全局變量,這樣做還會產生JavaScript警告,因為未聲明的全局變量常常導致預期之外的行為,所以不建議使用。
如果訪問一個未聲明的變量會導致拋出一個引用錯誤(ReferenceError)異常:
var a;
console.log("The value of a is " + a); // a 的值是 undefined
console.log("The value of b is " + b);// b 的值是 undefined
var b;
console.log("The value of c is " + c); // 未捕獲的引用錯誤: c 未被定義
let x;
console.log("The value of x is " + x); // x 的值是 undefined
console.log("The value of y is " + y);// 未捕獲的引用錯誤: y 未被定義
let y;
你可以使用 undefined 來判斷一個變量是否已賦值。在以下的代碼中,變量input未被賦值,因此 if 條件語句的求值結果是 true 。
var input;
if(input === undefined){
doThis();
} else {
doThat();
}
undefined 值在布爾類型環境中會被當作 false 。例如,下面的代碼將會執行函數 myFunction,因為數組 myArray 中的元素未被賦值:
var myArray = [];
if (!myArray[0]) myFunction();
數值類型環境中 undefined 值會被轉換為 NaN。
var a;
a + 2; // 計算為 NaN
當你對一個 null 變量求值時,空值 null 在數值類型環境中會被當作0來對待,而布爾類型環境中會被當作 false。例如:
var n = null;
console.log(n * 32); // 在控制臺中會顯示 0
變量的作用域
在函數之外聲明的變量,叫做全局變量,因為它可被當前文檔中的任何其他代碼所訪問。在函數內部聲明的變量,叫做局部變量,因為它只能在當前函數的內部訪問。
ECMAScript 6 之前的 JavaScript 沒有語句塊作用域;相反,語句塊中聲明的變量將成為語句塊所在函數(或全局作用域)的局部變量。例如,如下的代碼將在控制臺輸出 5,因為 x 的作用域是聲明了 x 的那個函數(或全局范圍),而不是 if 語句塊。
if (true) {
var x = 5;
}
console.log(x); // 5如果使用 ECMAScript 6 中的 let 聲明,上述行為將發生變化。
if (true) {
let y = 5;
}
console.log(y); // ReferenceError: y 沒有被聲明常量(Constants)
你可以用關鍵字 const 創建一個只讀的常量。常量標識符的命名規則和變量相同:必須以字母、下劃線(_)或美元符號($)開頭并可以包含有字母、數字或下劃線。
const PI = 3.14;
常量不可以通過重新賦值改變其值,也不可以在代碼運行時重新聲明。它必須被初始化為某個值。
常量的作用域規則與 let 塊級作用域變量相同。若省略const關鍵字,則該標識符將被視為變量。
在同一作用域中,不能使用與變量名或函數名相同的名字來命名常量。例如:
// 這會造成錯誤
function f() {};
const f = 5;
// 這也會造成錯誤
function f() {
const g = 5;
var g;
//語句
}
然而,對象屬性被賦值為常量是不受保護的,所以下面的語句執行時不會產生錯誤。
const MY_OBJECT = {"key": "value"};
MY_OBJECT.key = "otherValue";同樣的,數組的被定義為常量也是不受保護的,所以下面的語句執行時也不會產生錯誤。
const MY_ARRAY = ['HTML','CSS'];
MY_ARRAY.push('JAVASCRIPT');
console.log(MY_ARRAY); //logs ['HTML','CSS','JAVASCRIPT'];
總結
本文詳細介紹了JavaScrip的三種聲明方式,它們在使用上是有不同的。通過本文,你應該了解了JavaScript三種聲明方式:var,let,const 它們之間的使用區別,在實際應用中不要混淆,以免出錯。
相關文章
