技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營

贊助商

分類目錄

贊助商

最新文章

搜索

實例詳解區(qū)別JS三種聲明方式:var,let,const

作者:admin    時間:2022-5-9 17:42:57    瀏覽:

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

 區(qū)別JavaScript三種聲明方式:var,let,const

聲明

var

聲明一個變量,可選初始化一個值。

let

聲明一個塊作用域的局部變量,可選初始化一個值。

const

聲明一個塊作用域的只讀常量。

聲明變量

你可以用以下三種方式聲明變量:

  • 使用關(guān)鍵詞 var 。例如 var x = 42。這個語法可以用來聲明局部變量和全局變量。
  • 直接賦值。例如x = 42。在函數(shù)外使用這種形式賦值,會產(chǎn)生一個全局變量。在嚴(yán)格模式下會產(chǎn)生錯誤。因此你不應(yīng)該使用這種方式來聲明變量。
  • 使用關(guān)鍵詞 let 。例如 let y = 13。這個語法可以用來聲明塊作用域的局部變量。參考下面變量的作用域。

varlet 語句聲明的變量,如果沒有賦初始值,則其值為 undefined。

注意:像x = 42這種聲明方式將會創(chuàng)建一個未聲明全局變量,這樣做還會產(chǎn)生JavaScript警告,因為未聲明的全局變量常常導(dǎo)致預(yù)期之外的行為,所以不建議使用。

如果訪問一個未聲明的變量會導(dǎo)致拋出一個引用錯誤(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 條件語句的求值結(jié)果是 true 。

var input;
if(input === undefined){
  doThis();
} else {
  doThat();
}

undefined 值在布爾類型環(huán)境中會被當(dāng)作 false 。例如,下面的代碼將會執(zhí)行函數(shù) myFunction,因為數(shù)組 myArray 中的元素未被賦值:

var myArray = [];
if (!myArray[0])   myFunction();

數(shù)值類型環(huán)境中 undefined 值會被轉(zhuǎn)換為 NaN。

var a;
a + 2;    // 計算為 NaN

當(dāng)你對一個 null 變量求值時,空值 null 在數(shù)值類型環(huán)境中會被當(dāng)作0來對待,而布爾類型環(huán)境中會被當(dāng)作 false。例如:

var n = null;
console.log(n * 32); // 在控制臺中會顯示 0

變量的作用域

在函數(shù)之外聲明的變量,叫做全局變量,因為它可被當(dāng)前文檔中的任何其他代碼所訪問。在函數(shù)內(nèi)部聲明的變量,叫做局部變量,因為它只能在當(dāng)前函數(shù)的內(nèi)部訪問。

ECMAScript 6 之前的 JavaScript 沒有語句塊作用域;相反,語句塊中聲明的變量將成為語句塊所在函數(shù)(或全局作用域)的局部變量。例如,如下的代碼將在控制臺輸出 5,因為 x 的作用域是聲明了 x 的那個函數(shù)(或全局范圍),而不是 if 語句塊。

if (true) {
  var x = 5;
}
console.log(x); // 5

如果使用 ECMAScript 6 中的 let 聲明,上述行為將發(fā)生變化。

if (true) {
  let y = 5;
}
console.log(y); // ReferenceError: y 沒有被聲明

常量(Constants)

你可以用關(guān)鍵字 const 創(chuàng)建一個只讀的常量。常量標(biāo)識符的命名規(guī)則和變量相同:必須以字母、下劃線(_)或美元符號($)開頭并可以包含有字母、數(shù)字或下劃線。

const PI = 3.14;

常量不可以通過重新賦值改變其值,也不可以在代碼運(yùn)行時重新聲明。它必須被初始化為某個值。

常量的作用域規(guī)則與 let 塊級作用域變量相同。若省略const關(guān)鍵字,則該標(biāo)識符將被視為變量。

在同一作用域中,不能使用與變量名或函數(shù)名相同的名字來命名常量。例如: 

// 這會造成錯誤
function f() {};
const f = 5;


// 這也會造成錯誤
function f() {
  const g = 5;
  var g;

  //語句
}

然而,對象屬性被賦值為常量是不受保護(hù)的,所以下面的語句執(zhí)行時不會產(chǎn)生錯誤。

const MY_OBJECT = {"key": "value"};
MY_OBJECT.key = "otherValue";

同樣的,數(shù)組的被定義為常量也是不受保護(hù)的,所以下面的語句執(zhí)行時也不會產(chǎn)生錯誤。

const MY_ARRAY = ['HTML','CSS'];
MY_ARRAY.push('JAVASCRIPT');
console.log(MY_ARRAY); //logs ['HTML','CSS','JAVASCRIPT'];

總結(jié)

本文詳細(xì)介紹了JavaScrip的三種聲明方式,它們在使用上是有不同的。通過本文,你應(yīng)該了解了JavaScript三種聲明方式:var,let,const 它們之間的使用區(qū)別,在實際應(yīng)用中不要混淆,以免出錯。

相關(guān)文章

標(biāo)簽: var  let  const  js聲明  
x
  • 站長推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */