變量、常量、保留字
變量Variable:一種特殊的標識符(identifier)。存儲信息(值或表達式)的容器。
【與常量Constant相比,變量存儲的數據,可根據程序需要而改變;JS中的變量為notype,及弱類型】
1)命名規則:由Unicode字符串和數字組成。首字符為:字母、下划線、美元符號$。其后的還可用數字。
2)變量生存期(有效范圍):全局(global)變量、本地(local)變量。【變量沒有語句塊限制】
前者用於整個文檔中JS代碼運行結束止。后者用於函數及其嵌套的子函數中、但不能用於父級或其他函數。
常量Constant:不變的值。【IE不支持const】
1) const constantName = value1;
常量名首字符為字母或下划線,其后可有數字。 value1為直接量或表達式。
2)1個const關鍵字可定義1個或多個常量。
3)內置常量:JS中Infinity表無窮大的數值,-indinity表無窮小。NaN表非數值。
保留字:JS中有特殊含義的標識符。不能用於變量命名。
保留字大多數為關鍵字Keywords,還有一些為擴展准備而不建議使用的特性關鍵字(Future Keywords)
運算符與表達式
運算符Operator:操作變量或值。6-40種
9個算術Arithmetic: + - * / 模% 遞增++ 遞減-- 正號+ 取反-
【addition/subtraction/multiplication/division/modulus/increment/decrement/?/decrement
1個字符串String:+
3個邏輯Logical:邏輯與Logical AND && 邏輯或Logical OR || 邏輯非Logical NOT!
8個比較Comparison:> < >= <= == != 等同=== 不等同!== 【比較運算符在兩操作數間比較,返回布爾值
【greater than/less than/g t or q/l t or q/equal/not equal/strict equal/strict not equal
【==比較時會隱式轉換,===比較時不允許轉換。
7個逐位Bitwise:逐位與& 逐位或| 逐位非~ 逐位異或Bitwise XOR^ 【2值相同返0,否則1
Left Shift左移<< 帶符號右移>> 0補足右移>>>
【逐位運算符 將各進制的操作數轉換為32位的二進制數,並逐位/按位進行操作后返回十進制數。
【逐位運算符又分為:逐位邏輯運算符、逐位位移運算符。
12個賦值Assignment:①普通:= ②帶操作:+= -= *= /= %= &= ^= |= <<= >>= >>>=
特殊運算符:12種
條件conditional: boolCondition?value1:value2 (JS中唯一的三元運算符)
逗號comma:(,)JS最簡單的運算符,用於分割2個操作數。
delete:刪除成功返回true,否則false。
【刪除變量:不能刪除變量中var定義的變量。刪除未定義變量返true。刪除后不能訪問。
【刪除對象:不能刪除對象中var定義的對象。刪除未定義對象返true。刪除后不能訪問。
【刪除對象屬性:刪除不存在屬性返true。返問已刪除/不存在對象屬性返undefined。
【刪除數組元素:不管是否var定義都能刪除。刪后數組長度不變。刪后元素仍能訪問,值為undefined
in:判斷某屬性/元素是否屬於某對象/數組。 propNameOrNumber in objectName
【propNameOrNumber為屬性名時,是字符串或能轉為字符串的類型。
【propNameOrNumber為數組的下標時,是數字型或能轉為數字型的類型。
instanceof:判斷對象是否為某對象類型。 objectName instanceof objecrType
【objectName為對象名。objectType為對象類型,如Date/Arrayr等。Object是所有對象的類型。
new:一元。創建自定義/內置對象。如Array、Boolean、Function、Image、Option、RegExp等。
objectName = new objectType(param1 [,param2] …. [paramN] )
this:可在一個方法中調用當前對象。this propertyName
typeof:一元。返回字符串 表示操作數類型。typeof operand、typeof (literal)
【對直接量:返回結果類似變量。
typeof([1,2,3]) 返object
typeof({height:10,width:20}) 返object
typeof(function(a) {return -a}) 返function
【對關鍵字:null返object。undefined返undefined。
【對對象屬性:返回結果,與屬性值相關。typeof( location.host )返string。typeof( Math.PI )返nunber
※ 操作數為JS 核心對象(Array/Boolean/Date/Error/Function/Number/String/Object等),返回function
※ 操作數為BOM中的對象/方法(window/navigator/frames/location/history/document/screen),返回object
void:一元。計算某表達式/執行某方法等,不會有返回值。常用於a鏈接,打開新窗口而原窗口不變。
數組元素存取[ ]:二元。可讀寫數組元素值。get = array[ number ] array[ number ] = set
對象可看成一個數組:get = object[ propretyName ] object[ propretyName ]=set
函數調用( ):操作數有傳遞參數決定。用於調用函數/對象方法。
對象存取 .:二元。可讀寫對象屬性。get = objecct . proprety; object . proprety = set;
操作數Operant:運算符處理的數據。
由操作數個數,運算符分一元Unary、二元Binary和三元Ternary。【在JS中只有條件運算符是三元運算符】
表達式Expression:可為直接量、變量、常量、也可以是(運算符、操作符和標點符號)組成的語句。
【直接量:值(如:1233、“abc”、true、[1,2,5]、{width:100,height:200} ….)】最后1個為對象直接量
語句
5類:選擇語句、循環語句、跳轉語句、異常處理語句、其他語句。
語句塊:JS中的作用域是整個函數中,與大括號包圍的語句塊無關。
選擇語句:2種: if 、 switch
if語句、if…else語句、if…else if語句。可嵌套。
switch語句:在執行多個分支中,優於if語句(if每個分支需檢測一次變量值)。
※ switch語句中的case語句,需要一個終止(否則繼續執行后面的case語句),如break。
循環語句:for 、 while 、 do…while 【JS中的循環語句不提供執行分支,而是反復執行
逗號運算符與for語句結合:for(var x=0,y=3;x<y;x+=2,++y)
對象操作語句: for…in 、for each in
for…in:遍歷數組元素或對象屬性。for( 變量 in 數組/對象 ) { … }
(while和for…in的變量 在循環語句外 聲明)通過將所有 元素/屬性 反復賦值給 變量。
注意:遍歷時,若對象存在方法,此語句會將方法賦值給變量。
對象的大多數未定義的內置屬性及覆蓋內置屬性的方法,將不被遍歷。如String的length屬性和replace()方法
再循環體中刪除的屬性,將不被遍歷。
with語句:用於簡化引用代碼。
跳轉語句:label語句、break語句、continue語句。
跳轉語句必須放在循環體中。故lable語句需放在循環語句之前才有作用。
label語句語法:lableName:
break語句語法:break;或break lable;不能跳轉到其他循環語句前的lable中。
continue語句:只能跳出當前循環
異常處理語句:throw語句(拋出)、try…catch語句(捕獲)、finally語句。
幾個概念:異常exception:表出錯的信息。拋出throw:表異常狀況的信息。捕捉catch:處理拋出的異常。
異常類型:
JS 異常 |
Error: 普通異常。 |
EvalError: 使用eval()出錯。 |
RangeError: 數字超合法范圍。 |
ReferenceError: 讀取不存在變量。 |
SyntaxError: 語法錯誤。 |
TypeError: 類型錯誤。 |
URIError: URI編碼或解碼出錯。 |
DOM異常 |
DOMException DOM對象異常。 |
EventException :事件異常。 |
RangeException :范圍異常。 |
|
throw語句:可拋出異常對像或其他類型對象。如throw new Error(“出錯了”);或throw -1;或tw“xx”;
try...catch語句:try statement catch(ex) statemrnt【變量ex為throw拋出的Error對象。
finally語句:不能單獨執行,需與try語句合作。
其他語句:6種。空語句(排版/充當占位符)。注釋語句(//或/**/)。var語句(定義變量)。const語句(定義常量)。function語句(定義函數)。return語句(只用於函數體,返回一個值)。