第二章 JavaScript語法
程序設計語言分為解釋型和編譯型兩大類。
Java或C++等語言需要一個編譯器(comoiler)。編譯器是一種程序,能夠把源代碼翻譯成直接在計算機上執行的文件。
解釋型程序設計語言不需要編譯器,只需要解釋器。對于javascript來說,web瀏覽器負責有關解釋執行的工作。
編譯型語言編寫如果有錯誤,這些錯誤在代碼編譯階段就能被發現。而解釋型語言中的代碼錯誤只能等到解釋器執行到有關代碼時才能被發現。
與解釋型語言相比,編譯型語言往往速度更快,可移植性更好,但學習曲線更陡峭。
語句
用js編寫的腳本,由一系列指令構成,這些指令稱為語句(statement)。是構成腳本的基本單位。
變量
人的姓名和生日是固定不變的,但心情和年齡是變化的,會變化的東西成為變量(variable)。
假如我有一個變量mood,我可以把此時此刻的心情儲存于期中,不管值是happy還是sad,名字都是mood,我可以改變這個值。
把值存入變量的操作叫做賦值(assignment)。把變量mood賦值為happy,age賦值為33
mood="happy";
age=33
賦值之后則變量包含這個值,可以用如下語句把兩個變量的值顯示在一個彈出式警告窗口中:
alert(mood)
alert(age)
JS允許直接對變量賦值而無需實現聲明。很多程序設計語言是不允許的。很多語言要求在使用審核變量之前對她進行“介紹”,也就是聲明(declare)。在JS中,如果對變量賦值之前沒有聲明,賦值將自動聲明。但是提前聲明變量是一種良好的習慣。
var mood;
var age;
和 var mood,age;
相同。
var mood = "happy";
var age=33;
和 var mood = "happy", age = 33
相同
變量名稱不允許包含空格,標點。語序包含字母,數字,美元符號和下劃線(第一個字符不允許是數字)。為了讓較長名字易讀,可這樣
var my_mood = "happy";
或var myMood= "happy";
(駝峰格式)首選格式
var是一個關鍵字,myMood是一個變量名,happy是一個字面量。
數據類型
變量mood的值是一個字符串,變量age的值是一個數,雖然兩種不同類型數據,但在js中聲明和賦值的語法完全一樣。有些其他的語言要求在聲明變量的同時還必須同時聲明數據類型,稱作類型聲明。
必須確定聲明類型的語言成為強類型(strongly typed)語言。js不需要類型聲明,因此它是一種弱類型(weakly typed)語言。以為著可以在任何階段改變變量的數據類型。
以下語句在強類型中非法的,但js中完全沒有問題:
var age = "thirty three";
age = 33;
JS并不在意age的值試一個字符串還是一個數。
1. 字符串
字符串由零個或多個字符組成。字符包括但不限于字母,數字,標點符號和空格。字符串必須抱在引號里,單引號或者雙引號都可以。
2. 數值
賦一個數值給一個變量,可以是小數,成為浮點數。
3.布爾值(boolean)
只有兩個可選值:true 或 false。假設需要這樣一個變量:如果我正在睡覺,這個變量儲存一個值,如果我不在睡覺,這個變量儲存另外一個值。可用字符串賦值為sleeping或者not sleeping,但使用布爾值顯然是一個更好的選擇:
var sleeping = true;
從某種意義上講,為計算機設計程序就是與布爾值打交道。所有的電子電路只能識別和使用布爾值:電路中有無電流。只取2值中的1種。
布爾值不是字符串,不能用引號。
數組(array)
字符串,數值,布爾值都是標量。標量在任意時刻只能有一個值。如果用一個變量來儲存一組值,就需要用數組。在js中數組可以用Array來聲明。,我們可以用名為beatles的變量來保存四位成員名稱。
var beatles = Array(4); //可指定初始元素個數(長度),也可以不指定
var beatles = Array();
向數組添加元素的操稱為填充(populating)。不僅要給出值,還要給出存放位置,即下標(index)。一個元素配一個下標,用方括號括起來:
beatles[0] = "john";
從0開始作為第一個下標
1. 下面是聲明和填充全過程:
var beatles = Array(4);
beatles[0] = "john";
beatles[1] = "paul";
beatles[2] = "george";
beatles[3] = "ringo";
現在我們可以通過beatles[2]
來獲取元素george了。
beatles長度為4,可最后一個下標為3,因為下標從0計算的。
2. 相對簡單的方法,聲明時填充:
var beatles = Array("john","paul","george","ringo");
上述語句會自動分配一個下標。所以beatles[2]
還是獲取george、
3. 甚至可以不明確是創建數組,用方括號就行了:
var beatles = ["john","paul","george","ringo"];
數組里元素的數據類型:
1.數組的元素也不一定是字符串,布爾值,數值都可以。甚至可以混搭:
var years = [1940,1941,1942,1943];
var lennon = ["john",1940,false];
2.數組元素還可以是變量:
var name = "john";
beatles[0] = name;
這把第一個元素賦值為john
3.數組元素的值還可以是另外一個數組的元素
var names = ["ringo","john","george","paul"];
beatles[0] = names[3];
這樣就把beatles的第二個元素換成了paul
4.數組還可以包含其他數組,任何一個元素都可以把一個數組作為它的值:
var lennon = ["john",1940,false];
var beatles = [];
beatles[0]= lennon;
現在數組beatles的第一個元素的值是另外一個數組。獲取值需要更多方括號
beatles [0][0] //是john
beatles [0][2] //是false
對象
與數組類似,對象也是使用一個名字表示一組值。對象的每個值都是對象的一個屬性,例如lennon數組也可以創建成對象:
var lennon = Object();
lennon.name = "john";
lennon.year = 1940;
lennon.living = false;
與數組相似,創建對象使用Object關鍵字。不用方括號和下標來獲取元素,是用點號來獲取屬性。
更簡潔的創建方法:
var lennon = {name:"john",year:1940,living:false};
下面創建一個新的beatles數組,用lennon對象填充它第一個元素。
var beatles=array();
beatles[0]=lennon;
現在使用beatles[0].name可得到值john
在此基礎上,進一步改進,把beatles數組也聲明為對象而不是傳統數組,這樣我們就可以用drummer和bassist更有意思的字符串作為下標來訪問數組里的元素了:
var beatles = {}
beatles.vocalist = lennen;
則beatles.vocalist.name
是john。