3.1語(yǔ)法
3.1.1區(qū)分大小寫
? ?ECMAScript中的一切(變量让簿、函數(shù)名和操作符)都區(qū)分大小寫敬察。
3.1.2標(biāo)識(shí)符
? ?指變量、函數(shù)尔当、屬性的名字莲祸,或者函數(shù)的參數(shù)。
? ?格式規(guī)則:
? ? ? ?第一個(gè)字符必須是字母椭迎、下劃線(_)锐帜、美元符號(hào)($);
? ? ? ?其他字符可以是字母畜号、下劃線缴阎、美元符號(hào)或數(shù)字。
? ?ECMAScript標(biāo)識(shí)符采用駝峰大小寫格式简软,第一個(gè)字母小寫蛮拔,剩下的每個(gè)有意義的單詞的首字母大寫述暂。
? ?不能把關(guān)鍵字、保留字建炫、true畦韭、false和null用作標(biāo)識(shí)符。
3.1.3注釋
? ?//單行注釋
? ?/*
? ?*多行(塊級(jí))注釋
? ?*/
3.1.4嚴(yán)格模式
? ?在腳本頂部添加如下代碼:"use strict"肛跌。
3.1.5語(yǔ)句
? ?ECMAScript中的語(yǔ)句以一個(gè)分號(hào)結(jié)尾艺配;
? ?用花括號(hào)將多條語(yǔ)句組合到一個(gè)代碼塊中;
? ?始終在控制語(yǔ)句中使用代碼塊衍慎。
3.2關(guān)鍵字和保留字
? ?ECMA-262描述了一組具有特定用途的關(guān)鍵字转唉,可用于表示控制語(yǔ)句的開始或結(jié)束,或者用于執(zhí)行特定操作等:
? ?break do instanceof typeof case else new var catch finally return void continue for switch while debugger function this with default if throw delete in try
? ?保留字稳捆,可能在將來(lái)被用作關(guān)鍵字:
? ?abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public let yield
? ?關(guān)鍵字和保留字不能用作標(biāo)識(shí)符酝掩。
3.3變量
?ECMAScrit的變量是松散類型的,可以用來(lái)保存任何類型的數(shù)據(jù)眷柔,每個(gè)變量?jī)H僅是一個(gè)用于保存值得占位符而已期虾。
?定義變量:var(關(guān)鍵字) 變量名(標(biāo)識(shí)符);
?使用var操作定義的變量將成為定義該變量的作用域中的局部變量;
?可以使用一條語(yǔ)句定義多個(gè)變量驯嘱,用逗號(hào)分隔镶苞。
3.4數(shù)據(jù)類型
3.4.1typeof操作符
? ?檢測(cè)給定變量的數(shù)據(jù)類型。
3.4.2Undefined類型
? ?使用var聲明變量但未對(duì)其加以初始化時(shí)鞠评,這個(gè)變量的值就是undefined茂蚓。
? ?對(duì)未初始化和未聲明的變量執(zhí)行typeof操作符都返回undefined值。
3.4.3Null類型
? ?空對(duì)象指針剃幌。只要意在保存對(duì)象的變量還沒有真正保存對(duì)象聋涨,就應(yīng)該明確地讓該變量保存null值。
3.4.4Boolean類型
? ?只有兩個(gè)字面量:true和false负乡;
? ?調(diào)用轉(zhuǎn)型函數(shù)Boolean()牍白,將一個(gè)值轉(zhuǎn)換為其對(duì)應(yīng)的Boolean值。
3.4.5Number類型
? ?1.浮點(diǎn)數(shù)值中必須包含一個(gè)小數(shù)點(diǎn)抖棘,并且小數(shù)點(diǎn)后面必須至少有一位數(shù)字茂腥。
? ?2.數(shù)值范圍:5e-324~1.7976931348623157e+308;
? ? ?用isFinite()函數(shù)確定一個(gè)數(shù)值是否有窮。
? ?3.NaN:非數(shù)值切省,isNaN()函數(shù)確定參數(shù)是否“不是數(shù)值”最岗。
? ?4.數(shù)值轉(zhuǎn)換:
? ? ?Number()轉(zhuǎn)型函數(shù)可用于任何數(shù)據(jù)類型;
? ? ?parseInt()和parseFloat()專門用于把字符串轉(zhuǎn)換成數(shù)值朝捆。
3.4.6String類型
? ?由0個(gè)或多個(gè)16位Unicode字符組成的字符序列般渡,即字符串。字符串可以由雙引號(hào)("")或單引號(hào)('')表示。
? ?1.字符字面量
? ?2.字符串的特點(diǎn)
? ? ?ECMAScript中的字符串是不可變的驯用;
? ?3.轉(zhuǎn)換為字符串
? ? ?toString()方法脸秽;null和undefined沒有這個(gè)方法
? ? ?轉(zhuǎn)型函數(shù)String();能夠?qū)⑷我忸愋偷闹缔D(zhuǎn)換為字符串
? ? ?要把某個(gè)值轉(zhuǎn)換為字符串晨汹,可以使用加號(hào)操作符把它和一個(gè)字符串("")加在一起。
3.4.7Object類型
? ?是一組數(shù)據(jù)和功能的集合贷盲;
? ?var o = ?new Object ()淘这;
? ?Object 具有下列屬性和方法:
? ? ? Constructor:保存著用于創(chuàng)建當(dāng)前對(duì)象的函數(shù);
? ? ? ? ? ? ? hasOwnProperty(propertyName以字符串形式指定):檢測(cè)給定的屬性在當(dāng)前對(duì)象實(shí)例中是否存在巩剖;
? ? ?isPrototypeOf:檢查傳入的對(duì)象是否是另一對(duì)象的原型铝穷;
? ? ?propertyIsEnumerable(propertyName):檢查給定的屬性是否能夠使用for-in 語(yǔ)句來(lái)枚舉;
? ? ?toLocaleString():返回對(duì)象的字符串表示佳魔,與執(zhí)行環(huán)境的地區(qū)對(duì)應(yīng)曙聂;
? ? ?toString():返回對(duì)象的字符串表示;
? ? ?valueOf():返回對(duì)象的字符串鞠鲜、數(shù)值或布爾值表示宁脊;
3.5操作符:用于操作數(shù)據(jù)值
3.5.1一元操作符
? ?只能操作一個(gè)值的操作符叫做一元操作符。
? ?1.遞增和遞減操作符:
? ? ?前置型:變量的值都是在語(yǔ)句被求值以前改變的贤姆;
? ? ?后置型:遞增遞減操作是在包含它們的語(yǔ)句被求值之后才執(zhí)行的榆苞;
? ? ?遵循下列規(guī)則:
? ? ?1、包含有效數(shù)字的字符串:先轉(zhuǎn)化為數(shù)字值霞捡,再加減1坐漏;
? ? ?2、不包含有效數(shù)字字符的字符串:值為NaN碧信;
? ? ?3赊琳、false:先轉(zhuǎn)化為0再加減1;
? ? ?4砰碴、true:先轉(zhuǎn)化為1再加減1躏筏;
? ? ?5、浮點(diǎn)數(shù)值呈枉,加減1寸士;
? ? ?6、對(duì)象:先調(diào)用valueOf()取得一個(gè)可供操作的值再對(duì)該值應(yīng)用前述規(guī)則碴卧;如果結(jié)果是NaN弱卡,則在調(diào)用toString()后應(yīng)用前述規(guī)則。對(duì)象變量變成數(shù)值變量住册。
? ?2.一元加和減操作符
? ? ?應(yīng)用于非數(shù)值時(shí)會(huì)對(duì)這個(gè)值執(zhí)行轉(zhuǎn)換婶博。
3.5.2位操作符
? ?按內(nèi)存中表示數(shù)值的位來(lái)操作數(shù)值。先將64位的值轉(zhuǎn)化為32 位的整數(shù)荧飞,然后執(zhí)行操作凡人,最后再將結(jié)果轉(zhuǎn)化回64位名党。
? ?對(duì)有符號(hào)的整數(shù),前31位表示整數(shù)的值挠轴,第32位表示數(shù)值符號(hào)(符號(hào)位):0表示正數(shù)传睹,1表示負(fù)數(shù)。正數(shù)以純二進(jìn)制格式存儲(chǔ)岸晦;負(fù)數(shù)采用二進(jìn)制補(bǔ)碼(先求數(shù)值絕對(duì)值的二進(jìn)制欧啤,再求二進(jìn)制反碼,反碼加1)启上;
? ?1邢隧、(~)按位非,返回?cái)?shù)值的反碼冈在,本質(zhì)是操作數(shù)的負(fù)值減1倒慧;
? ?2、(&)按位與包券,將兩個(gè)數(shù)值的每一位對(duì)齊纫谅,全1為1,有0為0溅固;
? ?3系宜、按位或(|),有1為1发魄,全0為0盹牧;
? ?4、按位異或(^),相同為0励幼,不同為1汰寓;
? ?5、左移(<<)苹粟,不影響符號(hào)位有滑;
? ?6、有符號(hào)的右移(>>)嵌削,保留符號(hào)位毛好,以符號(hào)位的值來(lái)填充;
? ?7苛秕、無(wú)符號(hào)右移(>>>)肌访,以0填充;
3.5.3布爾操作符
? ?1艇劫、邏輯非(:鹗弧),可應(yīng)用于ECMAScript中的任何值,首先將操作數(shù)轉(zhuǎn)換為一個(gè)布爾值蟹演,然后求反风钻。
? ?2、邏輯與(&&)酒请,全true為true,有false為false骡技,短路操作符,第一個(gè)為false則不會(huì)求第二個(gè)數(shù)的值羞反;
? ?在有一個(gè)操作數(shù)不是布爾值的情況下:
? ? ? ?1布朦、第一個(gè)操作數(shù)是對(duì)象,返回第二個(gè)操作數(shù)苟弛;
? ? ? ?2喝滞、第二個(gè)數(shù)為對(duì)象阁将,只有當(dāng)?shù)谝粋€(gè)數(shù)為true才返回該對(duì)象膏秫;
? ? ? ?3、兩個(gè)數(shù)都是對(duì)象做盅,返回第二個(gè)缤削;
? ? ? ?4、有null吹榴,則返回null亭敢;
? ? ? ?5、有NaN图筹,則返回NaN帅刀;
? ? ? ?6、有undefined远剩,則返回undefined扣溺;
? ?3.邏輯或(||),有ture為true瓜晤,全false為false锥余,第一個(gè)數(shù)為true,則不會(huì)求第二個(gè)數(shù)的值痢掠;
? ? ? ?有一個(gè)操作數(shù)不是布爾值:
? ? ? ?1驱犹、第一個(gè)操作數(shù)是對(duì)象,返回第一個(gè)操作數(shù)足画;
? ? ? ?2雄驹、第一個(gè)數(shù)為false,返回第二個(gè)數(shù)淹辞;
? ? ? ?3荠医、兩個(gè)數(shù)都是對(duì)象,返回第一個(gè);
? ? ? ?4彬向、有null兼贡,則返回null;
? ? ? ?5娃胆、有NaN遍希,則返回NaN;
? ? ? ?6里烦、有undefined凿蒜,則返回undefined;
3.5.4乘性操作符
? ?在操作數(shù)為非數(shù)值的情況下會(huì)執(zhí)行自動(dòng)的類型轉(zhuǎn)換胁黑。
? ?1废封、乘法(*)
? ? ? ?特殊規(guī)則:
? ? ? ?1、操作數(shù)都是數(shù)值丧蘸,執(zhí)行常規(guī)的乘法計(jì)算漂洋;
? ? ? ?2、有NaN力喷,則為NaN刽漂;
? ? ? ?3、Infinity乘0弟孟,為NaN贝咙;
? ? ? ?4、Infinity乘非0拂募,為Infinity或-Infinity庭猩,取決于符號(hào)操作數(shù)的符號(hào);
? ? ? ?5陈症、Infinity乘Infinity蔼水,為Infinity;
? ? ? ?6爬凑、如果有一個(gè)操作數(shù)不是數(shù)值徙缴,則在后臺(tái)調(diào)用Number()將其轉(zhuǎn)換為數(shù)值粒督,再應(yīng)用上面的規(guī)則退敦。
? ?2.除法(/)
? ? ? ?特殊規(guī)則:
? ? ? ?1茬暇、操作數(shù)都是數(shù)值嘴纺,執(zhí)行常規(guī)的除法計(jì)算例朱;
? ? ? ?2产捞、有NaN超埋,則為NaN欧穴;
? ? ? ?3卦溢、Infinity被Infinity除糊余,為NaN秀又;
? ? ? ?4、非零有限數(shù)被零除贬芥,為Infinity或-Infinity吐辙,取決于符號(hào)操作數(shù)的符號(hào);
? ? ? ?5蘸劈、0除0昏苏,為NaN;
? ? ? ?6威沫、Infinity被任何非零數(shù)除贤惯,為Infinity或-Infinity,取決于符號(hào)操作數(shù)的符號(hào)棒掠;
? ? ? ?7孵构、如果有一個(gè)操作數(shù)不是數(shù)值,則在后臺(tái)調(diào)用Number()將其轉(zhuǎn)換為數(shù)值烟很,再應(yīng)用上面的規(guī)則颈墅。
? ?3.求模(%)
? ? ? ?特殊規(guī)則:
? ? ? ?1、操作數(shù)都是數(shù)值溯职,執(zhí)行常規(guī)的除法計(jì)算精盅;
? ? ? ?2帽哑、Infinity被Infinity除谜酒,為NaN;
? ? ? ?3妻枕、Infinity被有限大的數(shù)值除僻族,為NaN;
? ? ? ?4屡谐、非零有限大數(shù)被零除述么,為NaN;
? ? ? ?5愕掏、被除為0度秘,為0;
? ? ? ?6饵撑、有限大的數(shù)值被Infinity除剑梳,結(jié)果是被余數(shù);
? ? ? ?7滑潘、如果有一個(gè)操作數(shù)不是數(shù)值垢乙,則在后臺(tái)調(diào)用Number()將其轉(zhuǎn)換為數(shù)值,再應(yīng)用上面的規(guī)則语卤。
3.5.5加性操作符
? ?1追逮、加法
? ? ? ?1酪刀、數(shù)值加數(shù)值,常規(guī)計(jì)算钮孵;
? ? ? ?2骂倘、有NaN,為NaN巴席;
? ? ? ?3稠茂、Infinity加Infinity,為Infinity情妖;
? ? ? ?4睬关、-Infinity加-Infinity,為-Infinity毡证;
? ? ? ?5电爹、Infinity加-Infinity,為NaN料睛;
? ? ? ?6丐箩、+0加+0,為+0恤煞;
? ? ? ?7屎勘、-0加-0,為-0居扒;
? ? ? ?8概漱、+0加-0,為+0喜喂;
? ? ? ?9瓤摧、字符串加字符串,拼接玉吁;
? ? ? ?10照弥、字符串加非字符串,先將非字符串轉(zhuǎn)換成為字符串再拼接进副;
? ?2这揣、減法
? ? ? ?1、數(shù)值加數(shù)值影斑,常規(guī)計(jì)算给赞;
? ? ? ?2、有NaN鸥昏,為NaN塞俱;
? ? ? ?3、Infinity減Infinity吏垮,為NaN障涯;
? ? ? ?4罐旗、-Infinity減-Infinity,為NaN唯蝶;
? ? ? ?5九秀、Infinity減-Infinity,為Infinity粘我;
? ? ? ?6鼓蜒、+0減+0,為+0征字;
? ? ? ?7都弹、-0減-0,為+0匙姜;
? ? ? ?8畅厢、+0減-0,為-0氮昧;
? ? ? ?9框杜、-Infinity減Infinity,為-Infinity袖肥;
? ? ? ?10咪辱、如果有一個(gè)操作數(shù)是字符串、布爾值椎组、null油狂、undefined,先調(diào)用Number()函數(shù)將其轉(zhuǎn)換為數(shù)值庐杨,再按前面規(guī)則計(jì)算选调;
? ? ? ?11夹供、如果有一個(gè)操作數(shù)是對(duì)象灵份,先調(diào)用valueOf()函數(shù)取得表示該對(duì)象的數(shù)值,如果沒有valueOf(),則調(diào)用toString()并將結(jié)果轉(zhuǎn)化為數(shù)值哮洽,再按前面規(guī)則計(jì)算填渠;
3.5.6關(guān)系操作符
? ?< 、>鸟辅、<=氛什、>=
? ?1、如果兩個(gè)操作數(shù)都是數(shù)值匪凉,則執(zhí)行數(shù)值比較枪眉;
? ?2、兩個(gè)字符串再层,則比較字符編碼值贸铜,大寫字母編碼小于小寫字母編碼堡纬;
? ?3、如果一個(gè)操作數(shù)時(shí)數(shù)值蒿秦,則轉(zhuǎn)化另一個(gè)數(shù)為數(shù)值再比較烤镐;
? ?4、如果有一個(gè)操作數(shù)是對(duì)象棍鳖,先調(diào)用valueOf()函數(shù)取得表示該對(duì)象的數(shù)值炮叶,如果沒有valueOf(),則調(diào)用toString()并將結(jié)果轉(zhuǎn)化為數(shù)值,再按前面規(guī)則計(jì)算渡处;
? ?5镜悉、如果一個(gè)數(shù)是布爾值,則先轉(zhuǎn)換為數(shù)值在比較医瘫;
? ?6积瞒、任何操作數(shù)與NaN比較結(jié)果都是false;
3.5.7相等操作符
? ?1登下、相等(==)和不相等(茫孔!=)
? ?先轉(zhuǎn)換操作數(shù)(強(qiáng)制轉(zhuǎn)型),然后比較它們的相等性被芳;
? ?轉(zhuǎn)換規(guī)則:
? ? ? ?1缰贝、布爾值轉(zhuǎn)換為數(shù)值;
? ? ? ?2畔濒、字符串和數(shù)值比較剩晴,字符串轉(zhuǎn)換為數(shù)值;
? ? ? ?3侵状、有一個(gè)對(duì)象赞弥,先調(diào)用valueOf()再比較;
? ? ? ?4趣兄、null和undefined相等绽左;
? ? ? ?5、NaN等于NaN艇潭;
? ? ? ?6拼窥、兩個(gè)對(duì)象比較是不是同一個(gè)對(duì)象;
? ?2蹋凝、全等(===)和不全等(鲁纠!==)
? ?比較之前不轉(zhuǎn)換操作數(shù);
? ?全等表示兩個(gè)操作數(shù)未經(jīng)轉(zhuǎn)換就相等的情況鳍寂;
? ?不全等表示兩個(gè)操作數(shù)未經(jīng)轉(zhuǎn)換就不相等的情況改含;
3.5.8條件操作符
? ?variable = boolean_expression ? true_value : false_value;
3.5.9賦值操作符(=)
? ?把右邊的值賦給左側(cè)的變量;
? ?復(fù)合賦值操作符:*=迄汛、/=捍壤、%=刃唤、+=、—=白群、<<=尚胞、>>=、>>>=帜慢。
3.5.10逗號(hào)操作符
? ?可以在一個(gè)語(yǔ)句中執(zhí)行多個(gè)操作笼裳,多用于聲明多個(gè)變量,還可以用于賦值粱玲,返回表達(dá)式中最后一項(xiàng)躬柬;
3.6語(yǔ)句
ECMA-262規(guī)定了一組語(yǔ)句,也稱為流控制語(yǔ)句抽减。語(yǔ)句定義了ECMAScript的主要語(yǔ)法允青,通常使用一個(gè)或多個(gè)關(guān)鍵字來(lái)完成給定任務(wù)。
3.6.1if語(yǔ)句
始終使用代碼快(以一對(duì)花括號(hào)括起來(lái)的多行代碼)
? ?if (contidion1){
? ?? statement1
?? }else if (condition2){
? ?? statement2
?? }else {
??? statement3
?? }
3.6.2do-while語(yǔ)句
? ?對(duì)條件表達(dá)式求值前卵沉,循環(huán)體內(nèi)的代碼至少會(huì)被執(zhí)行一次颠锉。
do {
statement
} while (expression)
3.6.3while語(yǔ)句
? ?在循環(huán)體內(nèi)代碼被執(zhí)行之前,就會(huì)對(duì)出口條件求值史汗。
while (expression) {
statement
}
3.6.4for語(yǔ)句
? ?前置測(cè)試循環(huán)語(yǔ)句琼掠。
? ?for (initialization; expression; post-loop-expression可選) {
??? statement
?? }
3.6.5for-in語(yǔ)句
? ?是精準(zhǔn)的迭代語(yǔ)句,可以用來(lái)枚舉對(duì)象的屬性停撞。
for (property in expression) {
statement
}
3.6.6label語(yǔ)句
? ?在代碼中添加標(biāo)簽以便將來(lái)使用瓷蛙,一般與for語(yǔ)句等循環(huán)語(yǔ)句配合使用。
label : statement
3.6.7break和continue語(yǔ)句
? ?用于在循環(huán)中精確的控制代碼的執(zhí)行戈毒;break 語(yǔ)句會(huì)立即退出循環(huán)艰猬,強(qiáng)制繼續(xù)執(zhí)行循環(huán)后面的語(yǔ)句;continue語(yǔ)句立即退出循環(huán)埋市,然后從循環(huán)的頂部繼續(xù)執(zhí)行冠桃。
3.6.8with語(yǔ)句
? ?作用是將代碼的作用域設(shè)置到一個(gè)特定的對(duì)象中。
with (expression) {
statement
}
3.6.9switch語(yǔ)句
switch (expression) {
case value :statement
break ;
…
default:statement
}
3.7函數(shù)
function functionName (arg1,arg 2,…Arg n) {
statements
}
3.7.1理解參數(shù)
? ?命名的參數(shù)只提供便利恐疲,但不是必須的腊满。
? ?無(wú)需制定函數(shù)的返回值,因?yàn)槿魏蜤CMAScript函數(shù)都可以在任何時(shí)候返回任何值培己;未指定返回值的函數(shù)返回的是一個(gè)特殊的undefined 值。
? ECMAScript 中沒有函數(shù)簽名的概念胚泌,因?yàn)槠浜瘮?shù)參數(shù)是以一個(gè)包含零或多個(gè)值的數(shù)組形式傳遞省咨。
? ?可以向ECMAScript函數(shù)傳遞任意數(shù)量的參數(shù),并通過(guò)argument對(duì)象來(lái)訪問(wèn)這些參數(shù)玷室。
3.7.2沒有重載
? ?由于不存在函數(shù)簽名特性零蓉,函數(shù)不能重載笤受。