第二章 JavaScript語(yǔ)法
程序設(shè)計(jì)語(yǔ)言分為解釋型和編譯型兩大類。
Java或C++等語(yǔ)言需要一個(gè)編譯器(comoiler)旬盯。編譯器是一種程序,能夠把源代碼翻譯成直接在計(jì)算機(jī)上執(zhí)行的文件。
解釋型程序設(shè)計(jì)語(yǔ)言不需要編譯器胖翰,只需要解釋器接剩。對(duì)于javascript來(lái)說(shuō),web瀏覽器負(fù)責(zé)有關(guān)解釋執(zhí)行的工作萨咳。
編譯型語(yǔ)言編寫如果有錯(cuò)誤懊缺,這些錯(cuò)誤在代碼編譯階段就能被發(fā)現(xiàn)。而解釋型語(yǔ)言中的代碼錯(cuò)誤只能等到解釋器執(zhí)行到有關(guān)代碼時(shí)才能被發(fā)現(xiàn)培他。
與解釋型語(yǔ)言相比鹃两,編譯型語(yǔ)言往往速度更快,可移植性更好舀凛,但學(xué)習(xí)曲線更陡峭俊扳。
語(yǔ)句
用js編寫的腳本,由一系列指令構(gòu)成腾降,這些指令稱為語(yǔ)句(statement)拣度。是構(gòu)成腳本的基本單位。
變量
人的姓名和生日是固定不變的螃壤,但心情和年齡是變化的抗果,會(huì)變化的東西成為變量(variable)。
假如我有一個(gè)變量mood奸晴,我可以把此時(shí)此刻的心情儲(chǔ)存于期中冤馏,不管值是happy還是sad,名字都是mood寄啼,我可以改變這個(gè)值逮光。
把值存入變量的操作叫做賦值(assignment)。把變量mood賦值為happy墩划,age賦值為33
mood="happy";
age=33
賦值之后則變量包含這個(gè)值涕刚,可以用如下語(yǔ)句把兩個(gè)變量的值顯示在一個(gè)彈出式警告窗口中:
alert(mood)
alert(age)
JS允許直接對(duì)變量賦值而無(wú)需實(shí)現(xiàn)聲明。很多程序設(shè)計(jì)語(yǔ)言是不允許的乙帮。很多語(yǔ)言要求在使用審核變量之前對(duì)她進(jìn)行“介紹”杜漠,也就是聲明(declare)。在JS中察净,如果對(duì)變量賦值之前沒有聲明驾茴,賦值將自動(dòng)聲明。但是提前聲明變量是一種良好的習(xí)慣氢卡。
var mood;
var age;
和 var mood,age;
相同锈至。
var mood = "happy";
var age=33;
和 var mood = "happy", age = 33
相同
變量名稱不允許包含空格,標(biāo)點(diǎn)译秦。語(yǔ)序包含字母峡捡,數(shù)字击碗,美元符號(hào)和下劃線(第一個(gè)字符不允許是數(shù)字)。為了讓較長(zhǎng)名字易讀棋返,可這樣
var my_mood = "happy";
或var myMood= "happy";
(駝峰格式)首選格式
var是一個(gè)關(guān)鍵字延都,myMood是一個(gè)變量名雷猪,happy是一個(gè)字面量睛竣。
數(shù)據(jù)類型
變量mood的值是一個(gè)字符串,變量age的值是一個(gè)數(shù)求摇,雖然兩種不同類型數(shù)據(jù)射沟,但在js中聲明和賦值的語(yǔ)法完全一樣。有些其他的語(yǔ)言要求在聲明變量的同時(shí)還必須同時(shí)聲明數(shù)據(jù)類型与境,稱作類型聲明验夯。
必須確定聲明類型的語(yǔ)言成為強(qiáng)類型(strongly typed)語(yǔ)言。js不需要類型聲明摔刁,因此它是一種弱類型(weakly typed)語(yǔ)言挥转。以為著可以在任何階段改變變量的數(shù)據(jù)類型。
以下語(yǔ)句在強(qiáng)類型中非法的共屈,但js中完全沒有問(wèn)題:
var age = "thirty three";
age = 33;
JS并不在意age的值試一個(gè)字符串還是一個(gè)數(shù)绑谣。
1. 字符串
字符串由零個(gè)或多個(gè)字符組成。字符包括但不限于字母拗引,數(shù)字借宵,標(biāo)點(diǎn)符號(hào)和空格。字符串必須抱在引號(hào)里矾削,單引號(hào)或者雙引號(hào)都可以壤玫。
2. 數(shù)值
賦一個(gè)數(shù)值給一個(gè)變量,可以是小數(shù)哼凯,成為浮點(diǎn)數(shù)欲间。
3.布爾值(boolean)
只有兩個(gè)可選值:true 或 false。假設(shè)需要這樣一個(gè)變量:如果我正在睡覺断部,這個(gè)變量?jī)?chǔ)存一個(gè)值猎贴,如果我不在睡覺,這個(gè)變量?jī)?chǔ)存另外一個(gè)值家坎≈瞿埽可用字符串賦值為sleeping或者not sleeping,但使用布爾值顯然是一個(gè)更好的選擇:
var sleeping = true;
從某種意義上講虱疏,為計(jì)算機(jī)設(shè)計(jì)程序就是與布爾值打交道惹骂。所有的電子電路只能識(shí)別和使用布爾值:電路中有無(wú)電流。只取2值中的1種做瞪。
布爾值不是字符串对粪,不能用引號(hào)右冻。
數(shù)組(array)
字符串,數(shù)值著拭,布爾值都是標(biāo)量纱扭。標(biāo)量在任意時(shí)刻只能有一個(gè)值。如果用一個(gè)變量來(lái)儲(chǔ)存一組值儡遮,就需要用數(shù)組乳蛾。在js中數(shù)組可以用Array來(lái)聲明。鄙币,我們可以用名為beatles的變量來(lái)保存四位成員名稱肃叶。
var beatles = Array(4); //可指定初始元素個(gè)數(shù)(長(zhǎng)度),也可以不指定
var beatles = Array();
向數(shù)組添加元素的操稱為填充(populating)。不僅要給出值十嘿,還要給出存放位置因惭,即下標(biāo)(index)。一個(gè)元素配一個(gè)下標(biāo)绩衷,用方括號(hào)括起來(lái):
beatles[0] = "john";
從0開始作為第一個(gè)下標(biāo)
1. 下面是聲明和填充全過(guò)程:
var beatles = Array(4);
beatles[0] = "john";
beatles[1] = "paul";
beatles[2] = "george";
beatles[3] = "ringo";
現(xiàn)在我們可以通過(guò)beatles[2]
來(lái)獲取元素george了蹦魔。
beatles長(zhǎng)度為4,可最后一個(gè)下標(biāo)為3咳燕,因?yàn)橄聵?biāo)從0計(jì)算的勿决。
2. 相對(duì)簡(jiǎn)單的方法,聲明時(shí)填充:
var beatles = Array("john","paul","george","ringo");
上述語(yǔ)句會(huì)自動(dòng)分配一個(gè)下標(biāo)迟郎。所以beatles[2]
還是獲取george剥险、
3. 甚至可以不明確是創(chuàng)建數(shù)組,用方括號(hào)就行了:
var beatles = ["john","paul","george","ringo"];
數(shù)組里元素的數(shù)據(jù)類型:
1.數(shù)組的元素也不一定是字符串宪肖,布爾值表制,數(shù)值都可以。甚至可以混搭:
var years = [1940,1941,1942,1943];
var lennon = ["john",1940,false];
2.數(shù)組元素還可以是變量:
var name = "john";
beatles[0] = name;
這把第一個(gè)元素賦值為john
3.數(shù)組元素的值還可以是另外一個(gè)數(shù)組的元素
var names = ["ringo","john","george","paul"];
beatles[0] = names[3];
這樣就把beatles的第二個(gè)元素?fù)Q成了paul
4.數(shù)組還可以包含其他數(shù)組控乾,任何一個(gè)元素都可以把一個(gè)數(shù)組作為它的值:
var lennon = ["john",1940,false];
var beatles = [];
beatles[0]= lennon;
現(xiàn)在數(shù)組beatles的第一個(gè)元素的值是另外一個(gè)數(shù)組么介。獲取值需要更多方括號(hào)
beatles [0][0] //是john
beatles [0][2] //是false
對(duì)象
與數(shù)組類似,對(duì)象也是使用一個(gè)名字表示一組值蜕衡。對(duì)象的每個(gè)值都是對(duì)象的一個(gè)屬性壤短,例如lennon數(shù)組也可以創(chuàng)建成對(duì)象:
var lennon = Object();
lennon.name = "john";
lennon.year = 1940;
lennon.living = false;
與數(shù)組相似,創(chuàng)建對(duì)象使用Object關(guān)鍵字慨仿。不用方括號(hào)和下標(biāo)來(lái)獲取元素久脯,是用點(diǎn)號(hào)來(lái)獲取屬性。
更簡(jiǎn)潔的創(chuàng)建方法:
var lennon = {name:"john",year:1940,living:false};
下面創(chuàng)建一個(gè)新的beatles數(shù)組镰吆,用lennon對(duì)象填充它第一個(gè)元素帘撰。
var beatles=array();
beatles[0]=lennon;
現(xiàn)在使用beatles[0].name可得到值john
在此基礎(chǔ)上,進(jìn)一步改進(jìn)万皿,把beatles數(shù)組也聲明為對(duì)象而不是傳統(tǒng)數(shù)組摧找,這樣我們就可以用drummer和bassist更有意思的字符串作為下標(biāo)來(lái)訪問(wèn)數(shù)組里的元素了:
var beatles = {}
beatles.vocalist = lennen;
則beatles.vocalist.name
是john核行。