JavaScript第三章
<h3 id="1">1.語法</h3>
?
1.1 區(qū)分大小寫
ECMAScript中的一切(變量、函數(shù)名和操作符)都區(qū)分大小寫
注意:不能使用關(guān)鍵字
1.2 標(biāo)識符
指變量沉馆、函數(shù)携狭、屬性的名字暂殖,或者函數(shù)的參數(shù)
規(guī)則:第一個字符必須是一個字母、下劃線(_)或一個美元符號($)其他字符可以是字母、下劃線、美元符號或數(shù)字
駝峰大小寫格式(CMAScript的規(guī)則第一個字母小寫登疗,剩下的每個單詞的首字母大寫)
1.3 注釋
ECMAScript使用 C風(fēng)格的注釋(/**/或者//)
塊級注釋以一個斜杠和一個星號(/)開頭,以一個星號和一個斜杠(/)結(jié)尾
1.4 嚴(yán)格模式
在嚴(yán)格模式下嫌蚤,ECMAScript 3中的一些不確定的行為將得到處理辐益,而且對某些不安全 的操作也會拋出錯誤。
要在整個腳本中啟用嚴(yán)格模式脱吱,可以在頂部添加如下代碼: "use strict"
可以指定函數(shù)在嚴(yán)格模式下執(zhí)行: function doSomething(){ "use strict"; //函數(shù)體 }
1.5 語句
語句以一個分號“;”結(jié)尾
在控制語句中使用代碼塊可以讓編碼意圖更加清晰智政,而且也能降低修改代碼時出錯的幾率。
1.6 關(guān)鍵字
可用于表示控制語句的開始或結(jié)束箱蝠,或 者用于執(zhí)行特定操作等续捂。
1.7 保留字
非嚴(yán)格模式下
嚴(yán)格模式下
使用關(guān)鍵字作標(biāo)識符,會導(dǎo)致“Identifier Expected”錯誤
注意:關(guān)鍵字和保留字雖然仍然不能作為標(biāo)識符使用宦搬,但現(xiàn)在可以用作對象的屬性名牙瓢。
1.7 變量
變量是松散類型;可以用來保存任何類型的數(shù)據(jù)间校。
定義變量時要使用 var 操作符矾克;未初始化的變量會保存一個特殊值——undefined;定義后的變量可以取代不同類型的值(但是這個操作不推薦)憔足。
在函數(shù)中定義的變量生命周期為函數(shù)執(zhí)行到函數(shù)結(jié)束胁附,退出后就銷毀(必須是用var定義的,否則為全局變量)滓彰,只要調(diào)用過一次該函數(shù)控妻,這個變量就有了定義,就可以在函數(shù)外部的任何地方被訪問到揭绑。
在嚴(yán)格模式下弓候,不能定義名為 eval 或 arguments 的變量,否則會導(dǎo)致語法錯誤。
?
<h3 id="2">2.數(shù)據(jù)類型</h3>
?
2.1 基本數(shù)據(jù)類型(5種)
Undefined菇存、Null彰居、Boolean、Number 和String
2.2 復(fù)雜數(shù)據(jù)類型
object撰筷,本質(zhì)上是由一組無序的名值對組成的陈惰。
2.3 typeof操作符
是松散類型的,檢測給定變量的數(shù)據(jù)類型毕籽。
返回的字符串:
"undefined"——如果這個值未定義抬闯;
"boolean"——如果這個值是布爾值;
"string"——如果這個值是字符串关筒;
"number"——如果這個值是數(shù)值溶握;
"object"——如果這個值是對象或 null;
"function"——如果這個值是函數(shù)蒸播。
typeof 操作符的操作數(shù)可以是變量(message)睡榆,也可以是數(shù)值字面量;
使用:typeof 變量(或者數(shù)值字面量)
括號不是必須的
注意:調(diào)用 typeof null 會返回"object"袍榆,因為特殊值 null 被認為是一個空的對象引用
函數(shù)在 ECMAScript中是對象胀屿,不是一種數(shù)據(jù)類型(具有特殊屬性,可以區(qū)分函數(shù)與其他對象)包雀。
2.4 Undefined類型
Undefined 類型只有一個值宿崭,即特殊的 undefined;定義了一種類型卻沒有初始化的時候也為undefined類型才写;一般而言葡兑,不存在需要顯式地把一個變量設(shè)置為 undefined 值的情況;該類型主要用于比較赞草。
包含 undefined 值的變量與尚未定義的變量還是不一樣的讹堤。
對于尚未聲明的變量,只執(zhí)行typeof操作符檢測其數(shù)據(jù)類型厨疙;
對未經(jīng)聲明的變量調(diào)用 delete 不會導(dǎo)致錯 誤洲守,但這樣做沒什么實際意義,而且在嚴(yán)格模式下確實會導(dǎo)致錯誤轰异。
可以理解為一個是未初始化的類型岖沛,另一個是未聲明暑始,同樣有undefined的意思;
良好的習(xí)慣:顯式地初始化變量搭独,有利于檢測變量有沒有被聲明
2.5 Null類型
該類型只有一個值null;typeof 操作符檢測 null 值時會返回"object"(null值表示空對象指針)廊镜;
保存對象的變量還沒有真正保存對象牙肝,就應(yīng)該明確地讓該變量保存 null 值。(與undefined不一樣,需要顯式的進行設(shè)置值)
2.6 Boolean類型
有兩個字面值:true 和 false(與數(shù)字值沒關(guān)系(即true不一定是1配椭,false不一定是0)虫溜,區(qū)分大小寫;
所有類型的值都有與這兩個 Boolean 值等價的值
將一個值轉(zhuǎn)換為其對應(yīng)的 Boolean 值股缸,可以調(diào)用轉(zhuǎn)型函數(shù) Boolean()
字符串 message 被轉(zhuǎn)換成了一個 Boolean 值衡楞,該值被保存在 messageAsBoolean 變量中。
2.7 Number類型
2.7.1 整數(shù)
十進制
-
八進制
第一位必須是0敦姻,接著是八進制數(shù)列(0-7);
字面值中的 數(shù)值超出了范圍瘾境,那么前導(dǎo)零將被忽略,后面的數(shù)值將被當(dāng)作十進制數(shù)值解析;
八進制字面量在嚴(yán)格模式下是無效的镰惦。
-
十六進制
十六進制字面值的前兩位必須是 0x迷守,后跟任何十六進制數(shù)字(0~9 及 A~F);
進行算術(shù)計算時,所有以八進制和十六進制表示的數(shù)值終都將被轉(zhuǎn)換成十進制數(shù)值
2.7.2 浮點數(shù)值(不能作比較旺入,除了以精度計算即利用偏差值大小來判斷)
-
數(shù)值中必須包含一個小數(shù)點兑凿,并且小數(shù)點后面必須至少有一位數(shù)字
保存浮點數(shù)值需要的內(nèi)存空間是保存整數(shù)值的兩倍
注意:小數(shù)點后面沒有跟任何數(shù)字,那么這個數(shù)值就可以作為整數(shù)值來保存
-
浮點數(shù)值本身表示的就是一個整數(shù)(如1.0)茵瘾,那么該值也會被轉(zhuǎn)換為整數(shù)
-
科學(xué)計數(shù)法e表示法
前面是一個數(shù)值(可以是整數(shù)也可以是浮點數(shù))礼华,中間是一個大寫或小寫的字母E,后面是10的冪中的指數(shù)拗秘,該冪值將用來與前面的數(shù)相乘
2.7.3 數(shù)值范圍
超出 JavaScript數(shù)值范圍的值卓嫂,那么這個數(shù)值將被自動轉(zhuǎn)換成特殊的Infinity 值(具體來說,如果這個數(shù)值是負數(shù)聘殖,則會被轉(zhuǎn)換成-Infinity(負無窮)晨雳,如果這個數(shù)值是正數(shù),則會被轉(zhuǎn)換成 Infinity(正無窮))
-
確定是否有窮方法
isFinite()函數(shù)
這個函數(shù)在參數(shù)位于小與大數(shù)值之間時會返回true
訪問 Number.NEGATIVE_INFINITY 和 Number.POSITIVE_INFINITY 也可以 得到負和正 Infinity 的值
2.7.4 NaN 非數(shù)值(Not a Number)
作用:確定這個參數(shù)是否“不是數(shù)值”
任何不能被轉(zhuǎn)換為數(shù)值的值都會導(dǎo)致這個函數(shù)返回 true(根據(jù)是否可以轉(zhuǎn)換為數(shù)值來返回值)
-
使用在對象中
在基于對象調(diào)用 isNaN() 函數(shù)時奸腺,會首先調(diào)用對象的 valueOf()方法餐禁,然后確定該方法返回的值是否可以轉(zhuǎn) 換為數(shù)值。不能突照,則基于這個返回值再調(diào)用 toString()方法帮非,再測試返回值。
2.7.5 數(shù)值轉(zhuǎn)換
Number()讹蘑、parseInt()和 parseFloat()三個函數(shù)末盔,parseInt()和 parseFloat()專門用于把字符串轉(zhuǎn)換成數(shù)值。
-
轉(zhuǎn)型函數(shù) Number()可以用于任何數(shù)據(jù)類型
如果是 Boolean 值座慰,true 和 false 將分別被轉(zhuǎn)換為 1和 0陨舱。
如果是數(shù)字值,只是簡單的傳入和返回版仔。
如果是 null 值游盲,返回 0误墓。
如果是 undefined,返回 NaN益缎。
如果是字符串:只包含數(shù)字(包括前面帶正號或負號的情況)谜慌,則將其轉(zhuǎn)換為十進制數(shù)值;字符串中包含有效的浮點格式莺奔,如"1.1"欣范,則將其轉(zhuǎn)換為對應(yīng)的浮點數(shù)值;字符串中包含有效的十六進制格式令哟,例如"0xf"熙卡,則將其轉(zhuǎn)換為相同大小的十進制整 數(shù)值; 字符串是空的(不包含任何字符)励饵,則將其轉(zhuǎn)換為 0驳癌; 字符串中包含除上述格式之外的字符,則將其轉(zhuǎn)換為 NaN役听。
如果是對象:調(diào)用對象的 valueOf()方法颓鲜,然后依照前面的規(guī)則轉(zhuǎn)換返回的值。如果轉(zhuǎn)換 的結(jié)果是 NaN典予,則調(diào)用對象的 toString()方法甜滨,然后再次依照前面的規(guī)則轉(zhuǎn)換返回的字符 串值。
注意:一元加操作符的操作與 Number()函數(shù)相同瘤袖。
-
parseInt()函數(shù)
用 parseInt()轉(zhuǎn)換空字符串會返回 NaN(Number()對空字符返回 0)衣摩。如 果第一個字符是數(shù)字字符,parseInt()會繼續(xù)解析第二個字符捂敌,直到解析完所有后續(xù)字符或者遇到了 一個非數(shù)字字符;
如果字符串以"0x"開頭且后跟數(shù)字字符艾扮,就會將其當(dāng)作一 個十六進制整數(shù);如果字符串以"0"開頭且后跟數(shù)字字符占婉,則會將其當(dāng)作一個八進制數(shù)來解析泡嘴。
消除錯誤判斷換進制,為該函數(shù)提供第二個參數(shù)能確保獲得正確結(jié)果逆济。
此為了避免錯誤的解析酌予,我們建議無論在什么情況下都明確指定基數(shù)(常常解析10進制數(shù)字,始終將 10 作為第二個參數(shù)是非常必要的奖慌。)
-
parseFloat()函數(shù)
字符串中的第一個小數(shù)點是有效的抛虫,而第二個小數(shù)點就是無效的了,因此它后面的字符串將被忽略,例子: "22.34.5"將會被轉(zhuǎn)換為 22.34简僧;
該函數(shù)只解析十進制值建椰;
始終都會忽略前導(dǎo)的零,注意:十六進制格式的字符串則始終會被轉(zhuǎn)換成 0涎劈;
字符串包含的是一個可解析為整數(shù)的數(shù)(沒有小數(shù)點广凸,或者小數(shù)點后 都是零)阅茶,parseFloat()會返回整數(shù)蛛枚。
2.7.6 String類型
用于表示由零或多個16位Unicode字符組成的字符序列谅海,即字符串;
字符串可以由雙 引號(")或單引號(')表示蹦浦;
-
字符字面量(轉(zhuǎn)義序列)
-
任何字符串的長度都可以通過訪問其 length 屬性取得
這個屬性返回的字符數(shù)包括 16 位字符的數(shù)目扭吁。如果字符串中包含雙字節(jié)字符,那么 length 屬性 可能不會精確地返回字符串中的字符數(shù)目
-
ECMAScript中的字符串是不可變的(重要)
改變某個變量保存的字符串盲镶,首先要銷毀原來的字符串侥袜,然后再用另一個包含新值的字符串填充該變量;
過程描述:首先創(chuàng)建一個能容納 10個字符的 新字符串,然后在這個字符串中填充"Java"和"Script"溉贿,后一步是銷毀原來的字符串"Java"和字 符串"Script"
-
轉(zhuǎn)換為字符串的方式(主要為兩種方法)
-
使用幾乎每個值都有的 toString()方法
返回相應(yīng)值的字符串表現(xiàn)
注意: null 和 undefined 值沒有這個方法
通過傳遞基數(shù)枫吧,toString()可以輸出以二進制、八進制宇色、十六進制九杂,乃至其他任意有效進制格 式表示的字符串值
-
轉(zhuǎn)型函數(shù) String()
能夠?qū)⑷魏晤愋偷闹缔D(zhuǎn)換為字符串(在不知轉(zhuǎn)換的值是否為null或者undefined情況下)
如果值有 toString()方法,則調(diào)用該方法(沒有參數(shù))并返回相應(yīng)的結(jié)果宣蠕; (針對是否為null和undefined)
如果值是 null例隆,則返回"null"; 如果值是 undefined抢蚀,則返回"undefined"镀层。
-
特殊方法:要把某個值轉(zhuǎn)換為字符串,可以使用加號操作符把它與一個字符 串("")加在一起
2.7.7 Object類型
ECMAScript中的對象其實就是一組數(shù)據(jù)和功能的集合
對象可以通過執(zhí)行 new 操作符后跟要創(chuàng)建 的對象類型的名稱來創(chuàng)建
在 ECMAScript中皿曲,如果不給構(gòu)造函數(shù)傳遞參數(shù)唱逢,則可以省略后面的那一對圓括號(與java的一個不同之處)
-
對象都具有的屬性和方法
-
ECMA-262中對象的行為不一定適用于 JavaScript中的其他對象
?
<h3 id="3">3.操作符</h3>
?
用于操作數(shù)據(jù)值,適用于很多值屋休,例如字 符串惶我、數(shù)字值、布爾值博投,甚至對象绸贡。
包括算術(shù)操作符(如加號和減號)、位操作符毅哗、 關(guān)系操作符和相等操作符
3.1一元操作符
只能操作一個值的操作符
包括算術(shù)操作符(如加號和減號)听怕、位操作符、 關(guān)系操作符和相等操作符虑绵。
-
遞增和遞減操作符
遞增和遞減操作符直接借鑒自 C尿瞭,而且各有兩個版本:前置型和后置型。
執(zhí)行前置遞增和遞減操作時翅睛,變量的值都是在語句被求值以前改變的声搁。(在計算機科學(xué)領(lǐng)域黑竞,這種情況通常被稱作副效應(yīng))
適用規(guī)則:
-
一元加和減操作符
一元加操作符
以一個加號(+)表示,放在數(shù)值前面疏旨,用于表示負數(shù)很魂,對數(shù)值不會產(chǎn)生任何影響
對非數(shù)值應(yīng)用一元加操作符時,該操作符會像 Number()轉(zhuǎn)型函數(shù)一樣對這個值執(zhí)行轉(zhuǎn)換,步驟為:布爾值 false 和 true 將被轉(zhuǎn)換為 0和 1檐涝,字符串值會被按照一組特殊的規(guī)則進行解析遏匆,而對象是先調(diào)用它們的 valueOf()和(或)toString()方法,再轉(zhuǎn)換得到的值谁榜。
一元減操作符
用于表示負數(shù)幅聘,例如將1轉(zhuǎn)換成-1
應(yīng)用于非數(shù)值時,一元減操作符遵循與一元加操作符相同的規(guī)則窃植,后再將得到的數(shù)值轉(zhuǎn)換為負數(shù)
3.2 位操作符
用于在基本的層次上帝蒿,即按內(nèi)存中表示數(shù)值的位來操作數(shù)值
ECMAScript 中的所有數(shù) 值都以 IEEE-754 64位格式存儲,操作的時候先將64位的值轉(zhuǎn)換成32位的整數(shù)巷怜,再進行位操作葛超,最后才將結(jié)果轉(zhuǎn)換成64位(副效應(yīng)——對特殊的 NaN 和 Infinity 值應(yīng)用位操作時,這兩個值都會被當(dāng)成 0來處理丛版;解決方法:如果對非數(shù)值應(yīng)用位操作符巩掺,會先使用 Number()函數(shù)將該值轉(zhuǎn)換為一個數(shù)值(自動完成),然后 再應(yīng)用位操作页畦。得到的結(jié)果將是一個數(shù)值)
對于有符號的整數(shù)胖替,32位中的前 31位用于表示整數(shù)的值。第 32位用于表示數(shù)值的符號
-
負數(shù)以二進制碼存儲豫缨,使用的格式是二進制補碼独令。計算二級制補碼的步驟:
默認情況下,ECMAScript 中的所有整數(shù)都是有符號整數(shù)好芭。
按位非(NOT):按位非操作符由一個波浪線(~)表示燃箭,執(zhí)行按位非的結(jié)果就是返回數(shù)值的反碼
按位與(AND):按位與操作符由一個和號字符(&)表示,它有兩個操作符數(shù)舍败。
按位或(OR) :按位或操作符由一個豎線符號(|)表示招狸,同樣也有兩個操作數(shù)。
按位異或(XOR) :按位異或操作符由一個插入符號(^)表示邻薯,也有兩個操作數(shù)裙戏。
左移操作符:由兩個小于號(<<)表示,這個操作符會將數(shù)值的所有位向左移動指定的位數(shù)厕诡。用0進行補位累榜。左移不會影響操作數(shù)的符號位。
有符號的右移 :有符號的右移操作符由兩個大于號(>>)表示灵嫌,這個操作符會將數(shù)值向右移動壹罚,但保留符號位(即 正負號標(biāo)記)注意:用符號位填充
無符號右移:無符號右移操作符由 3個大于號(>>>)表示葛作,這個操作符會將數(shù)值的所有 32位都向右移動;對正數(shù)來說猖凛,無符號右移的結(jié)果與有符號右移相同赂蠢;對負數(shù)來說,無符號右移是以 0來填充空位形病,而不是像有符號右移那 樣以符號位的值來填充空位客年。(會出現(xiàn)變大的情況)
3.3 布爾操作符
-
邏輯非
邏輯非操作符由一個嘆號(O挤)表示漠吻,可以應(yīng)用于 ECMAScript中的任何值。
邏輯非操作符首先會將它的操作數(shù)轉(zhuǎn)換為一個布爾值司恳,然后再 對其求反途乃。
-
邏輯與
邏輯與操作可以應(yīng)用于任何類型的操作數(shù)
邏輯與操作符由兩個和號(&&)表示,有兩個操作數(shù)
邏輯與操作屬于短路操作扔傅,即如果第一個操作數(shù)能夠決定結(jié)果耍共,那么就不會再對第二個操作數(shù)求值。
-
邏輯或
邏輯或操作符由兩個豎線符號(||)表示猎塞,有兩個操作數(shù)
短路操作符:如果第一個操作數(shù)的求值結(jié)果為 true试读,就不會對第二個操作數(shù)求值了
如果 preferredObject 的值不是 null,那么它的值將被賦給 myObject荠耽;如果 是 null钩骇,則將 backupObject 的值賦給 myObject
3.4 乘性操作符
乘法、除法和求模
在操作數(shù)為非數(shù)值的情況下會執(zhí)行自動的類型轉(zhuǎn)換
-
乘法
乘法操作符由一個星號(*)表示铝量,用于計算兩個數(shù)值的乘積
-
除法
除法操作符由一個斜線符號(/)表示倘屹,執(zhí)行第二個操作數(shù)除第一個操作數(shù)的計算
3.5 加減性操作符(+/-)
兩個操作符都是數(shù)值,執(zhí)行常規(guī)的加法計算慢叨,然后根據(jù)下列規(guī)則返回結(jié)果:
其中有一個操作數(shù)是字符串
其中有一個是對象纽匙、數(shù)值或布爾值,先調(diào)用其toString()方法取得相應(yīng)的字符串值拍谐,再根據(jù)字符串規(guī)則來返回烛缔。
對于 undefined 和 null,則分別調(diào)用 String()函數(shù)并取得字符串"undefined"和"null"
3.6 關(guān)系操作符
小于(<)轩拨、大于(>)践瓷、小于等于(<=)和大于等于(>=)
返回值:布爾值
字符串:實際比較的是兩個字符串中對應(yīng)位置的每個字符的字符編碼值;
必須把兩個操作數(shù)轉(zhuǎn)換為相同的大 小寫形式(全部大寫或全部小寫),由于大小寫的編碼不同(真正按字母表順序比較字符串時候)气嫁。
與NaN比較的時候永遠都返回false
3.7 相等操作符
相等(==)和不相等(当窗!=)——先轉(zhuǎn)換再比較(強制轉(zhuǎn)型)
全等(===)和不全等(!==)——僅比較而不轉(zhuǎn)換
null == undefined 會返回 true,因為它們是類似的值寸宵;但 null === undefined 會返回 false崖面,因為它們是不同類型的值
為了保持代碼中數(shù)據(jù)類型的完整 性元咙,我們推薦使用全等和不全等操作符
3.8 條件操作符
表達式為:表達式1?表達式2:表達式3
先求解表達式1巫员,若其值為真(非0)則將表達式2的值作為整個表達式的取值庶香,
否則(表達式1的值為0)將表達式3的值作為整個表達式的取值。
3.9 賦值操作符
簡單的賦值操作符由等于號(=)表示简识,其作用就是把右側(cè)的值賦給左側(cè)的變量
3.10 逗號操作符
使用逗號操作符可以在一條語句中執(zhí)行多個操作
逗號操作符多用于聲明多個變量赶掖;但除此之外,逗號操作符還可以用于賦值七扰。在用于賦值時奢赂,逗號操作符總會返回表達式中的后一項
?
<h3 id="4">4.流控制語句</h3>
?
4.1 if語句
if (condition) statement1 else statement2
condition(條件)可以是任意表達式
調(diào)用 Boolean()轉(zhuǎn)換函數(shù)將這個表達式的結(jié)果轉(zhuǎn)換為一個布爾值(不是布爾值的時候)
4.2 do-while語句(像 do-while 這種后測試循環(huán)語句最常用于循環(huán)體中的代碼至少要被執(zhí)行一次的情形。 )
一種后測試循環(huán)語句
對條件表達式求值之前颈走,循環(huán)體內(nèi)的代碼至少會被執(zhí)行一次
4.3 while語句
while(expression) statement
while 語句屬于前測試循環(huán)語句
4.4 for語句
for (initialization; expression; post-loop-expression) statement
ECMAScript中不存在塊級作用域膳灶,因此在循環(huán)內(nèi)部定義的變量也可以在外部訪問到
將這三個表達式全部省略,就可以創(chuàng)建一個無限循環(huán)
4.5 for-in語句(遍歷)
for (property in expression) statement
一種精準(zhǔn)的迭代語句立由,可以用來枚舉對象的屬性
表示要迭代的對象的變量值為 null 或 undefined轧钓,不執(zhí)行循環(huán)體
Safari 3以前版本的for-in語句中存在一個bug,該bug會導(dǎo)致某些屬性被返回兩次
ECMAScript 對象的屬性沒有順序锐膜。因此毕箍,通過 for-in 循環(huán)輸出的屬性名的順序是不可預(yù)測的。 具體來講道盏,所有屬性都會被返回一次而柑,但返回的先后次序可能會因瀏覽器而異。
4.6 label語句
可以在代碼中添加標(biāo)簽捞奕,以便將來使用
label: statement
加標(biāo)簽的語句一般都 要與 for 語句等循環(huán)語句配合使用
4.7 break和continue語句
用于在循環(huán)中精確地控制代碼的執(zhí)行
break 語句會立即退出循環(huán)牺堰, 強制繼續(xù)執(zhí)行循環(huán)后面的語句。而 continue 語句雖然也是立即退出循環(huán)颅围,但退出循環(huán)后會從循環(huán)的頂 部繼續(xù)執(zhí)行
4.8 with語句
將代碼的作用域設(shè)置到一個特定的對象中
with (expression) statement;
目的主要是為了簡化多次編寫同一個對象的工作
注意:嚴(yán)格模式下不允許使用 with 語句伟葫,否則將視為語法錯誤。
由于大量使用 with 語句會導(dǎo)致性能下降院促,同時也會給調(diào)試代碼造成困難筏养,因此 在開發(fā)大型應(yīng)用程序時,不建議使用 with 語句常拓。
4.9 switch語句
一種流控制語句
語義:switch 語句中的每一種情形(case)的含義是:“如果表達式等于這個值(value)渐溶,則執(zhí)行后面的 語句(statement)”。而 break 關(guān)鍵字會導(dǎo)致代碼執(zhí)行流跳出 switch 語句弄抬。
通過為每個 case后面都添加一個 break 語句茎辐,就可以避免同時執(zhí)行多個 case代碼的情況。
可以在 switch 語句中使用任何數(shù)據(jù)類型,無論是字符串拖陆,還是對象都沒有問題弛槐。其次,每個 case的值不一定是常量依啰,可以是變量乎串,甚至是表達式。
注意:switch 語句在比較值時使用的是全等操作符速警,因此不會發(fā)生類型轉(zhuǎn)換(例如叹誉, 字符串"10"不等于數(shù)值 10)。
?
<h3 id="5">5.函數(shù)</h3>
?
- ECMAScript中的函數(shù)使用 function 關(guān)鍵字來聲明闷旧,后跟一組參數(shù)以及函數(shù)體冀痕。
調(diào)用函數(shù)通過其函數(shù)名來調(diào)用
ECMAScript 中的函數(shù)在定義時不必指定是否返回值球匕。
任何函數(shù)在任何時候都可以通過 return 語句后跟要返回的值來實現(xiàn)返回值
return 語句也可以不帶有任何返回值释簿。在這種情況下椿争,函數(shù)在停止執(zhí)行后將返回 undefined 值逾柿。
一個函數(shù)中也可以包含多個 return 語句
- 嚴(yán)格模式下:
- 理解參數(shù):
ECMAScript函數(shù)不介意傳遞進 來多少個參數(shù)缀棍,也不在乎傳進來參數(shù)是什么數(shù)據(jù)類型。(原因:ECMAScript中的參數(shù)在內(nèi)部是用一個數(shù)組來表示)
在函數(shù)體內(nèi)可以通過 arguments 對象來 訪問這個參數(shù)數(shù)組机错,從而獲取傳遞給函數(shù)的每一個參數(shù)(arguments 對象只是與數(shù)組類似(它并不是 Array 的實例))
通過訪問 arguments 對象的 length 屬性可以獲知有多少個參數(shù)傳遞給了函數(shù)
函數(shù) doAdd()會在只有一個參數(shù)的情況下給該參數(shù)加上 10爬范;如果是兩個參數(shù),則將那個參數(shù)簡單 相加并返回結(jié)果弱匪。
- 沒有重載
ECMAScirpt 函數(shù)沒有簽名青瀑,因為其參數(shù)是由包含零或多個值的數(shù)組來表示的。而沒有函數(shù)簽名萧诫,真正的重載是不可能做到的斥难。 如果在 ECMAScript中定義了兩個名字相同的函數(shù),則該名字只屬于后定義的函數(shù)帘饶。
<h3 id="6">6.小結(jié)</h3>