第三章 基本概念
3.1 語(yǔ)法
3.1.1 區(qū)分大小寫
-
變量名test和Test完全不同
3.1.2 標(biāo)識(shí)符:變量、函數(shù)、屬性的名字,或者函數(shù)的參數(shù)
-
命名規(guī)則
-
第一個(gè)字符必須是一個(gè)字母、下劃線、或者美元符號(hào)$
-
其他字符可以是字母、下劃線、美元符號(hào)、數(shù)字
-
采用駝峰大小寫格式:第一個(gè)字母小寫,剩下每個(gè)單詞首字母大寫。
-
for example:myName、herAge。
-
駝峰式命名雖不是強(qiáng)制要求,但可以視為一種最佳實(shí)踐。
3.1.3 注釋
包括單行注釋和塊級(jí)注釋。
-
單行注釋:以兩個(gè)斜杠開頭。如下所示:
// alert(“HelloWorld!”)
-
塊級(jí)注釋:以一個(gè)斜杠和一個(gè)星號(hào)(/*)開頭,以一個(gè)星號(hào)和一個(gè)斜杠結(jié)尾。如下所示:
/*
這是一個(gè)
多行的
塊級(jí)注釋
*/
3.1.4 嚴(yán)格模式
-
定義:為JavaScript定義的一種不同的解析與執(zhí)行模型。
-
使用方法:
-
在整個(gè)腳本中啟用嚴(yán)格模式,可以在頂部添加代碼
“use strict”;
。
-
也可以在函數(shù)內(nèi)部的上方包含這條編譯指示。
-
使用效果:嚴(yán)格模式下,ECMAScript3中的一些不確定行為會(huì)得到處理,而且對(duì)某些不安全的操作也會(huì)拋出錯(cuò)誤。嚴(yán)格模式下,js的執(zhí)行效果會(huì)有很大不同。
3.1.5 語(yǔ)句
-
ECMAScript中的語(yǔ)句以一個(gè)分號(hào)結(jié)尾,但非必需。
-
若省略分號(hào),則由解析器確定語(yǔ)句的結(jié)尾。
-
建議不要省略分號(hào),因?yàn)閷懮辖馕銎骶筒槐匾倩〞r(shí)間推測(cè)應(yīng)該在哪里插入分號(hào)了。
3.2 關(guān)鍵字和保留字
ECMA-262描述了一組具有特定用途的關(guān)鍵字和一組不能用做標(biāo)識(shí)符的保留字。
-
關(guān)鍵字:可以用于表示控制語(yǔ)句的開始或結(jié)束、或用于執(zhí)行特定操作等。
-
保留字:保留字雖然在這門語(yǔ)言中還沒(méi)有特定的用途,但他們有可能在將來(lái)被用作關(guān)鍵字。
3.3 變量
-
ECMAScript的變量是松散類型,即可以用來(lái)保存任何類型的數(shù)據(jù)。
-
定義變量時(shí)要用var操作符,后跟變量名,例如
var message
,當(dāng)然了,也可以直接在定義的時(shí)候?qū)ψ兞孔鲆粋€(gè)初始化,例如var message = ‘hi’ ;
-
這段的意思是變量message中保存了一個(gè)字符串“hi”。像這樣初始化變量并不會(huì)把它標(biāo)記為字符串類型,初始化的過(guò)程就只是給變量賦了一個(gè)值。
-
因此,劃重點(diǎn),可以在修改變量的同時(shí)修改值的類型。例如:
var message = ‘hi’ ;
message = 100 ; //有效,但不推薦
//這個(gè)例子代表變量message一開始保存了一個(gè)字符串“hi”,然后該值又被一個(gè)數(shù)字值100取代了。
-
有一點(diǎn)需要注意,用var操作符定義的變量將成為該變量的作用域中的局部變量。也就是說(shuō)如果在函數(shù)中使用var定義一個(gè)變量,那么這個(gè)變量在函數(shù)退出后就會(huì)被銷毀。例如:
function test(){
var message = ‘hi’ ; //局部變量
} ;
test();
alert(message); //錯(cuò)誤
//為什么是錯(cuò)誤?
//這里,變量message是在函數(shù)里用var定義的,當(dāng)函數(shù)被調(diào)用時(shí),就會(huì)創(chuàng)建該變量并為其賦值。而在此之后,這個(gè)變量會(huì)立即被銷毀。所以在執(zhí)行alerat()那行代碼的時(shí)候message已經(jīng)被銷毀了,因此報(bào)錯(cuò)。
那么,該怎么解決呢?
-
在函數(shù)內(nèi)部省略掉var操作符,就可以創(chuàng)建一個(gè)全局變量,例子:
function test(){
message = ‘hi’ ; //局部變量
} ;
test();
alert(message); // hi
//在函數(shù)內(nèi)部不用var會(huì)創(chuàng)建全局變量。
//但我們并不提倡這種做法,因?yàn)榫植孔饔糜蛑卸x的全局變量很難去維護(hù)。
//所以我們應(yīng)該選擇在開始就定義好所有的變量。