【一】 變數
1. 在ECMAScript中,不管什麼類型的變數,聲明都只是用var關鍵字
2. 變數名是區分大小寫
3. 變數名的開頭只能使用字母和“ $”和“_”
4. 特殊情況:
var num=10;
var num=5;
在大多數程式設計語言中都會發生程式錯誤
但在ECMAScript中被解釋為:
var num=10;
num=5;
【二】 資料類型分類
有9中資料類型:未定義(Undefined)、空(Null)、布爾(Boolean)、字串(String)、數值(Number)、對象(Object)、引用(Reference)、列表(List)、完成(Completion)
基本類型:
1) undefined是未定義型。任何未賦值的變數都有一個undefined值,開發人員也可以把自己的變數賦值為undefined
2) null是空類型,null是一個預留位置,表示一個變數已經有值,但是值為空白
3) boolean例子:Javascript:alert(1<2); 結果:true
4) string注意情況:
區分Null 字元串和空值:
var str=””; //Null 字元串,表示str是一個字串,字串的內容為空白
var str=null; //空值,表示str的值是空
不區分單引號和雙引號,但是要成對出現
5) number:數實值型別
var num=10; //十進位
var num=1.99; //十進位小數
var num=010; //八進位
var num=0XFD; //十六進位
var num=9.99e+9; //科學計數
不管參與計算的數值時什麼進位的數值,計算結果必定為十進位
Number有三種特殊的常量值,分別是NaN、+Infinity、-Infinity
NaN:非數值常量表示一個值並不是合法的數值形式,通常用來驗證一個變數的值是否是數值。例子:javascript:var str=”abcd”; alert(str==NaN);
+Infinity:正無窮變數表示一個數值運算式的結果是無窮大,ECMAScript規定2
的1024次方以上的數位無窮大,例如:alert(Math.Pow(2,1024));結果:Infinity
參考型別:
參考型別通常被認為是類,而它的值是對象,例如:
var a=Object;
var b=a;
a.name=”abcd”;
alert(b.name); //結果為:abcd;
注意:因為被賦值的對象和原變數引用了同一個對象,修改任意一個引用時,另一個也會受影響
【三】 類型轉換
1、轉換成數實值型別
隱藏轉換:
alert(‘101’-1); //字串轉數字,結果為100
alert(1-null); //null轉數值,結果為1
alert(true+false+1); //布爾值轉數值,結果為2
alert(1-undefined); //undefined轉數值,結果為NaN
顯示轉換:ParseInt() ParseFloat()
2、轉換成字串類型
alert(‘abcd’+null+undefined+123+true);結果:abcdnullundefined123true
3、轉換成布爾類型
【四】運算子
===值與資料類型都必須相等
其他運算子:
l 運算子instanceof
執行個體判斷運算子,用於判斷一個對象是否為一個類的執行個體
l 運算子void
取消回值運算子,用於取消一個運算式的結果,例如:
alert(void ParaseInt(‘123’)); 結果為:undefined
l 運算子delete
刪除值運算子,用來刪除對象的屬性或者數值中的元素,如下:
delete obj.a;
//通過方括弧運算子來調用屬性,刪除後再調用這個屬性時會得到undefined
delete obj[‘a’];
//刪除數組中的第一個元素,刪除後再調用array[0]時會得到undefined;
javascript:var a=[1,2,3]; delete a[0]; alert(a[0]);//結果:undefined
l 運算子in
屬性驗證運算子,可以驗證一個對象是否包含某屬性
【五】數組
var a=[1,’2’,true];
多維陣列:
var arr1=[1,2,3];
var arr2=[4,5,6];
var arr3=[arr1,arr2];
記住:
1) 可以存放任何類型的資料
2) 訪問數組中的元素必需通過索引,但試圖訪問不存在的索引時,例如a[-1],並不會報錯,而是返回一個undefined值
3) 如果試圖給一個不存在的索引賦值時,也不會發生程式錯誤,而是自動的拓展數組
【六】函數
文法:
Function 函數名(形式參數1,形式參數2,…,形式參數n)
{
語句
return 傳回值;
}
在Javascript定義一個函數一般有如下三種方式:
- 函數關鍵字(function)語句:
function fnMethodName(x){alert(x);}
- 函數字面量(Function Literals):
var fnMethodName = function(x){alert(x);}
- Function()建構函式:
var fnMethodName = new Function('x','alert(x);')
上面三種方法定義了同一個方法函數fnMethodName,第1種就是最常用的方法,後兩種都是把一個函數複製給變數fnMethodName,而這個函數是沒有名字的,即匿名函數。實際上,相當多的語言都有匿名函數。
1、function sub(a,b)
{
return a-b;
}
alert(sub(3,5));
2、//建立一個匿名函數
var func=new function()
{
alert(‘func’);
}
func();
3、//建立一個內部匿名函數
var func=new function()
{
return function(){
alert(‘這是一個內部匿名函數’);
}
}
func()()
《Javascript的一種模組模式》中的第一句話就是“全域變數是魔鬼”。配合var關鍵字,匿名函數可以有效保證在頁面上寫入Javascript,而不會造成全域變數的汙染。這在給一個不是很熟悉的頁面增加Javascript時非常有效,也很優美。
4、javascript:(function(){alert('建立後直接運行!');})()
記住:
1) 參數名可以重複,但通過此參數擷取的值為實際傳遞參數值的最後一個,如果實際傳遞的參數值的個數少於重新命名的參數個數,那麼通過此參數名擷取的值為undefined
2) 即使函式宣告了參數,調用時也可以不傳遞參數值
3) 調用函數時可以傳遞若干個參數值給函數,而不用管函式宣告時有幾個參數,並且實際傳遞的參數值還都可以在函數內擷取,例如:
function arg()
{
var result=’’;
for(var i=0;i<arguments.length;i++)
{
result+=arguments[i]+’,’;
alert(‘調用者傳遞了’+arguments.length+’個參數,分別是:’+result);
}
}
arg(1,2,3,4,.5,6);