Before Coding [11] - js的變量和常量

必備知識:前面課程的學習

JavaScript 基礎知識

JavaScript 的很多語法借鑒自 Java,但也受 Awk,Perl 和 Python 影響。 同時,JavaScript 是大小寫敏感的,使用 Unicode 字符集。

在 JavaScript 中,語句用分號分隔(;),它也具有分號自動插入功能來結束語句。但是,建議隨時添加分號結束你的語句以避免副作用。

JavaScript 的注釋語法跟 C++ 和許多其他語言相同:

// 單行注釋
 
/* 這是一個多行注釋 
   多行注釋
*/
 
/* 但是, 你不能, /* 嵌套注釋 */ 語法錯誤 */

變量(Variables)

在編程中,使用變量來為值命名。在 JavaScript 中,一個標識符必須以字母、下劃線(_)或者美元($)符號開頭;后續的字符可以包含數字(0-9)。因為 JavaScript 語言是區分大小寫的,這里所指的字母可以是大寫的 “A” 到字母 “Z” 和小寫的 “a” 到 “z” 。

聲明變量(Declaring variables)

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

  • 使用關鍵詞 var。例如,var x = 42。這個語法可以同時用來聲明局部和全局變量。
  • 直接賦值。例如,x = 42。這樣就聲明了一個全局變量并會導致 JavaScript 編譯時產生一個嚴格警告。因而你應避免使用這種非常規格式。
  • 使用關鍵詞 let。例如,let y = 13。這個語法可以用來聲明語句塊代碼段的局部變量。

對變量求值(Evaluating variables)

varlet 聲明的未賦初值的變量,值會被設定為 undefined(即未定義值,本身也是一個值)。

試圖訪問一個未初始化的變量會導致一個 ReferenceError 異常被拋出:

var a;
console.log("The value of a is " + a); // logs "的值未定義"
console.log("The value of b is " + b); // 拋出ReferenceError異常

你可以使用 undefined 來確定變量是否已賦值。以下的代碼中,變量 input 未被賦值,因而 if 條件語句的求值結果是 true 。

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

undefined 值在布爾類型環境中會被當作 false 。例如,下面的代碼將運行函數 myFunction ,因為數組 myArray 中的元素未被賦值:

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

數值類型環境中 undefined 值會被轉換為 NaN

NaN為“Not a Number”,不是一個數字的縮寫。

var a;
a + 2; // Evaluates to NaN

當你對一個空變量求值時,空值null在數值類型環境中會被當作0來對待,而布爾類型環境中會被當作false
。例如:

var n = null;
console.log(n * 32); // logs 0

變量的域(Variable scope)

在所有函數之外聲明的變量,叫做全局變量,因為它可被當前文檔中的其他代碼所訪問。
在函數內部聲明的變量,叫做局部變量,因為它只能在該函數內部訪問。

全局變量實際上是全局對象的屬性。在網頁中,缺省的全局對象是 window,所以你可以用形如 window.variable的語法來設置和訪問全局變量。

語句塊中聲明的變量將成為語句塊所在代碼段的局部變量。例如,如下的代碼將在控制臺輸出 5,因為 x 的作用域是聲明了 x 的那個函數(或全局范圍),而不是 if 語句塊。

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

如果使用 let 聲明,上述行為將發生變化。

if (true) {
    let y = 5;
}
console.log(y); // ReferenceError: y is not defined

常量(Constants)

你可以用關鍵字 const 創建一個只讀(read-only)的常量。

常量標識符的命名規則和變量的相同:必須以字母、下劃線或美元符號開頭并可以包含有字母、數字或下劃線。

const prefix = '212';

常量不可以通過賦值改變其值,也不可以在腳本運行時重新聲明。它必須被初始化為某個值。

常量的作用域規則與 let 塊級作用域變量相同。若 const 關鍵字被省略了,該標識符將被視為變量。

在同一作用域中,不能用與變量或函數同樣的名字來命名常量。例如:

// THIS WILL CAUSE AN ERROR
function f() {};
const f = 5;

// THIS WILL CAUSE AN ERROR ALSO
function f() {
  const g = 5;
  var g;
}

原文:《變量和常量》(From 《Before Coding》

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容