基礎(chǔ)概念
標(biāo)識(shí)符
所謂標(biāo)識(shí)符是指變量渔肩、函數(shù)贬墩、屬性的名字陈症,或者函數(shù)的參數(shù)。標(biāo)識(shí)符的書寫有幾個(gè)特征
- 區(qū)分大小寫
- 第一個(gè)字符必須是字母震糖、下劃線(_)录肯、或者是$
- 后面的可以是字母、數(shù)字吊说、下劃線论咏、$
命名規(guī)約
- 使用是實(shí)際意義的單詞
- 變量使用駝峰規(guī)則,第一個(gè)單詞首字母小寫颁井,后面單詞首字母大寫
- 變量使用名詞厅贪,方法函數(shù)使用動(dòng)詞開頭,常量全部用大寫字母雅宾,函數(shù)創(chuàng)建對(duì)象首字母大寫
var firstName;
var isSmall;
var hasClass;
var PI;
var MAX_COUNT;
function getName(){}
function Person(){}
變量
在計(jì)算機(jī)科學(xué)中养涮,變數(shù)是指一個(gè)表示某個(gè)存在內(nèi)存中的值的名稱。
計(jì)算機(jī)程序中的變量是指在程序的運(yùn)行過程中隨時(shí)可以發(fā)生變化的量眉抬。
變量來源于數(shù)學(xué)贯吓,是計(jì)算機(jī)語言中能儲(chǔ)存計(jì)算結(jié)果或能表示值抽象概念。變量可以通過變量名訪問蜀变。在指令式語言中悄谐,變量通常是可變的;但在純函數(shù)式語言(如Haskell)中库北,變量可能是不可變(immutable)的爬舰。在一些語言中们陆,變量可能被明確為是能表示可變狀態(tài)、具有存儲(chǔ)空間的抽象(如在Java和Visual Basic中)情屹;但另外一些語言可能使用其它概念(如C的對(duì)象)來指稱這種抽象坪仇,而不嚴(yán)格地定義“變量”的準(zhǔn)確外延。
在JavaScript中變量是用來保存值的占位符垃你,定義變量的時(shí)候要使用var運(yùn)算符椅文, 后面跟一個(gè)作為名稱的標(biāo)識(shí)符即可
var message;
弱類型
在一些編譯語言(C、Java蜡镶、C#)等變量的類型是固定的雾袱,在聲明變量的時(shí)候就要標(biāo)識(shí)其類型,在程序執(zhí)行前編譯階段變量的類型就確定了官还,而且不能改變芹橡,我們稱之為強(qiáng)類型
int a = 2;
string b = "hello";
一些常見的解釋型語言(PHP、JavaScript)等變量的類型是松散的望伦,一個(gè)變量可以用來保存任何類型的數(shù)據(jù)林说,變量的類型不是由聲明時(shí)決定(聲明的時(shí)候只是用了var運(yùn)算符),而是在程序執(zhí)行階段由其值的類型決定屯伞,隨著程序運(yùn)行其值類型改變腿箩,變量類型也會(huì)發(fā)生改變
var message = 1; //message 類型就是數(shù)字
message = "hello world!"; //message 類型變?yōu)樽址?
需要強(qiáng)調(diào)的一點(diǎn):弱類型語言不是沒有數(shù)據(jù)類型!
語句
語句(statement)是為了完成某種任務(wù)而進(jìn)行的操作劣摇,比如下面就是一行賦值語句
var a = 1 + 2;
這條語句先用var運(yùn)算符珠移,聲明了變量a,然后將 1+2 的運(yùn)算結(jié)果賦值給變量a末融。
JavaScript中語句以;結(jié)束钧惧,一行可以包含多條語句,如果省略分號(hào)不會(huì)產(chǎn)生語法錯(cuò)誤勾习,解釋器會(huì)自動(dòng)判斷語句結(jié)束
var sum = 1 + 2
var diff = 3 - 4;
雖然分號(hào)不是必須浓瞪,但是強(qiáng)烈建議大家要加上,這樣可以保證程序健壯性和可讀性巧婶,在js壓縮等場景不會(huì)發(fā)生意外錯(cuò)誤
JavaScript解釋器在基本情況下會(huì)從上到下逐句執(zhí)行語句乾颁,但是有個(gè)變量提升的特性
變量提升
JavaScript引擎的工作方式是,先解析代碼艺栈,獲取所有被聲明的變量英岭,然后再一行一行地運(yùn)行。這造成的結(jié)果眼滤,就是所有的變量的聲明語句巴席,都會(huì)被提升到代碼的頭部,這就叫做變量提升
我們寫了一個(gè)賦值語句
var a = 2;
實(shí)際上執(zhí)行過程是解釋器在未執(zhí)行的時(shí)候先解析出變量聲明诅需,然后給他初始值undefined漾唉,然后才逐句執(zhí)行程序
var a;
a = 2;
這樣看起來沒什么區(qū)別,但是在多語句的情況下會(huì)有差別堰塌,我們知道一個(gè)變量如果不存在我們就使用會(huì)報(bào)錯(cuò)
console.log(xxx); // Uncaught ReferenceError: xxx is not defined
我們?cè)谑褂靡粋€(gè)變量之前必須聲明變量赵刑,但是由于變量提升,我們?nèi)绻暶髁俗兞砍⌒蹋词乖诼暶髡Z句前使用也是可以的般此,只不過其值是初始值undefined
console.log(xxx); // undefined
var xxx = 2;
注釋
并不是所有的語句都會(huì)執(zhí)行,我們可以通過注釋功能讓js引擎忽略部分語句牵现,這個(gè)功能經(jīng)常用來解釋我們的部分語句铐懊,和讀書做標(biāo)注一樣
Javascript提供兩種注釋:一種是單行注釋,用//起頭瞎疼;另一種是多行注釋科乎,放在/ 和 /之間。
//為變量賦值
var a = 1; //賦值成功
/*
下面定義個(gè)函數(shù)
至于什么是函數(shù)
且聽下回分解
*/
function getName(id){
return 'Byron';
}
關(guān)鍵字和保留字
關(guān)鍵字是JavaScript引擎會(huì)用到的一些字贼急,我們標(biāo)識(shí)符不能再使用茅茂,比如定義變量的關(guān)鍵字var,關(guān)鍵字有
break | else | new | var |
case | finally | return | void |
catch | for | switch | while |
continue | function | this | with |
default | if | throw | |
delete | in | try | |
do | instanceof | typeof |
除了這些不能用作標(biāo)識(shí)符的關(guān)鍵字太抓,js還規(guī)定了一些不能用作標(biāo)識(shí)符的保留字空闲,這些字符沒有什么意義,但是未來會(huì)用到
abstract | enum | int | short |
boolean | export | interface | static |
bye | extends | long | super |
char | final | native | synchronized |
class | float | package | throws |
const | goto | private | transient |
debugger | implements | protected | volatile |
doubler | import | public |