做BS系統(tǒng),,JavaScript的使用是少不了的,;本文就帶你快速回顧一下JavaScript的基本知識(shí),看看哪些基礎(chǔ)知識(shí)是你所遺漏的 ① js是一種基于對(duì)象和事件的腳本語(yǔ)言,,使用瀏覽器來(lái)執(zhí)行,。 ② js是解釋型語(yǔ)言,無(wú)需編譯就可隨時(shí)運(yùn)行,。 ③ 安全性:不允許訪(fǎng)問(wèn)本地硬盤(pán),;跨平臺(tái):有支持js的瀏覽器即可。 ④ 在網(wǎng)頁(yè)中編寫(xiě)js代碼推薦使用外部引用的方式,,這樣可以多個(gè)頁(yè)面共享js代碼,,達(dá)到代碼復(fù)用。 (1) 大小寫(xiě)敏感,,嚴(yán)格區(qū)分大小寫(xiě),。 (2) 定義字符串,可以使用“雙引號(hào)”,,也可使用“單引號(hào)”,,推薦使用單引號(hào)與html避免沖突。 (3) js是“弱類(lèi)型”語(yǔ)言,,支持“動(dòng)態(tài)類(lèi)型”,,沒(méi)有顯示數(shù)據(jù)類(lèi)型,聲明變量都用var (4) 網(wǎng)頁(yè)中的js代碼應(yīng)該放到<script></script>標(biāo)簽中,,<script>標(biāo)簽可以放到<head>,、<body>等任意位置,并且一個(gè)頁(yè)面可以有不止一對(duì)<script></script>標(biāo)簽,。 (5) 每條語(yǔ)句后用“;”來(lái)結(jié)尾,,可以方便做js壓縮并且提高代碼可讀性 (6) 變量命名規(guī)則:以字母、下劃線(xiàn)或$開(kāi)頭,,中間可以包括字母,、數(shù)字、下劃線(xiàn)或$ (7) 關(guān)鍵字,、保留字
(8) 注釋 單行注釋?zhuān)?// ;塊級(jí)注釋?zhuān)?strong>/* */,;推薦使用單行注釋 (9) 數(shù)據(jù)類(lèi)型 js中有5種簡(jiǎn)單數(shù)據(jù)類(lèi)型(也稱(chēng)為基本數(shù)據(jù)類(lèi)型):Undefined(未定義) 取值-undefined,、Null(空對(duì)象) 取值-null、Boolean(布爾) 取值-true或false,、Number(數(shù)字) 取值-所有數(shù)字,,包含整數(shù)和小數(shù),范圍相當(dāng)于double,、String(字符串) 取值-,。還有1種復(fù)雜數(shù)據(jù)類(lèi)型——Object(對(duì)象類(lèi)型) 取值-任何對(duì)象,本質(zhì)上是由一組無(wú)序的名值對(duì)組成的,。 typeof運(yùn)算符用來(lái)檢測(cè)變量的數(shù)據(jù)類(lèi)型
(10) 其它語(yǔ)句如if,、while、for等等與C#幾乎一致 (11) 轉(zhuǎn)義字符“\”也與C#一樣 (1) ==與=== ==,、!=:對(duì)于其兩邊的表達(dá)式,,如果類(lèi)型相同,則直接比較,,如果不同,,則嘗試轉(zhuǎn)換成為相同類(lèi)型再判斷;==認(rèn)為null與undefined,、undefined與undefined是相等的 ===,、!==:判斷前不進(jìn)行類(lèi)型轉(zhuǎn)換,===兩邊必須類(lèi)型相同,、值也相同時(shí)才會(huì)返回true (2) null與undefined null:表示一個(gè)有意義的值,,表示“無(wú)值”或“無(wú)對(duì)象”,變量的狀態(tài)為已知狀態(tài),;通過(guò)設(shè)置對(duì)象為null,,來(lái)釋放對(duì)對(duì)象的引用,以便瀏覽器回收內(nèi)存。 undefined: ① 聲明變量但未賦值時(shí),,變量的值為undefined ② 方法沒(méi)有return語(yǔ)句返回值時(shí),,返回undefined ③ 未聲明的變量,通過(guò)typeof()檢測(cè)變量時(shí),,返回"undefined"字符串,。 ④ 訪(fǎng)問(wèn)不存在的屬性時(shí)返回undefined 注:把null轉(zhuǎn)換為數(shù)字,結(jié)果為0,。而把undefined轉(zhuǎn)換為數(shù)字結(jié)果為NaN,。 (3) 判斷變量是否可用 變量不可用:變量聲明未賦值、變量未聲明就使用,、變量值為null 判斷: if(typeof(v) !='undefined' && v != null) 推薦寫(xiě)法:if(v) --這里會(huì)把v先轉(zhuǎn)換為boolean類(lèi)型再判斷 ,;對(duì)于null,、undefined,、0、空字符串就會(huì)轉(zhuǎn)換為false (4) 變量作用域 ① 全局變量:在頁(yè)面上直接聲明的變量,,“全局”是指在整個(gè)當(dāng)前頁(yè)面都能訪(fǎng)問(wèn)到的變量,;
② 函數(shù)內(nèi)部變量:作用范圍為當(dāng)前函數(shù)內(nèi)部 ③ 沒(méi)有塊級(jí)作用域范圍,所以在方法中任何地方聲明的變量都是在整個(gè)方法中有效,。 ④ 聲明變量可以用“var”,也可不用,,不用“var”聲明的變量是全局變量; ⑤ js中同樣不能有重名的變量,,js發(fā)現(xiàn)變量重復(fù)后悔自動(dòng)忽略后面的聲明,,只是用第一次聲明的變量 注:推薦在js聲明變量時(shí)要用var,且少使用全局變量 (5) 數(shù)據(jù)類(lèi)型轉(zhuǎn)換 ① 字符串轉(zhuǎn)化數(shù)字 字符串轉(zhuǎn)換為整數(shù):parseInt(numString, [radix]) radix 為要解析的字符串的基數(shù),。該值介于 2 ~ 36 之間,。如果省略該參數(shù)或其值為 0,則數(shù)字將以 10 為基礎(chǔ)來(lái)解析,。如果它以 “0x” 或 “0X” 開(kāi)頭,,將以 16 為基數(shù)。如果該參數(shù)小于 2 或者大于 36,,則 parseInt() 將返回 NaN,。 字符串轉(zhuǎn)化為小數(shù):parseFloat(numString) ② 任意類(lèi)型到指定類(lèi)型 轉(zhuǎn)為字符串:String(object)、對(duì)象.toString() 轉(zhuǎn)為Boolean:Boolean(object) 轉(zhuǎn)化為數(shù)字:Number(object) ③ NaN:當(dāng)某類(lèi)型轉(zhuǎn)化為數(shù)字失敗時(shí),,返回NaN,,表示不是一個(gè)數(shù)字;NaN不等于任何值,,包括它自己,,判斷時(shí)需要使用isNaN(arg)函數(shù) (6) eval() 函數(shù)
注:不推薦使用,效率低且不安全 (7) String對(duì)象 ① length屬性:獲取字符串的字符個(gè)數(shù),。(無(wú)論中文字符還是英文字符都算1個(gè)字符,。) ② charAt(index)方法:獲取指定索引位置的字符。(索引從0開(kāi)始) ③ indexOf(‘字符串’,startIndex)方法:獲取指定字符串第一次出現(xiàn)的位置,。startIndex表示從第幾個(gè)開(kāi)始搜索,。 ④ split(‘分隔符’,limit);//根據(jù)分隔符將一個(gè)字符串返回為一個(gè)數(shù)組。limit表示要返回的數(shù)組的最大長(zhǎng)度(可自定義),。多個(gè) 隔符使用正則表達(dá)式:var msg = 'a★b★c☆d☆e#f';var vals = msg.split(/☆|★|#/);alert(vals); ⑤ substr(startIndex,len)//從startIndex開(kāi)始,,截取len個(gè)字符。 ⑥ substring(startIndex,stopIndex)//從startIndex開(kāi)始,,截取到stopIndex位置(不包括stopIndex所在的字符),。 ⑦ toUpperCase()//轉(zhuǎn)換大寫(xiě)、toLowerCase();//轉(zhuǎn)換小寫(xiě) ⑧ match(),、replace(),、search()方法,正則表達(dá)式相關(guān) (8) 普通函數(shù) -->基礎(chǔ)
-->函數(shù)重載
注:推薦使用“命名參數(shù)”增加程序可讀性 -->“函數(shù)”即“對(duì)象” ① 對(duì)象成員
② 例子 <script type="text/javascript"> function getUserName() { var first_name = ‘Li'; var last_name = ‘Li'; return last_name + first_name; } //此時(shí)user_name中為函數(shù)getUserName()執(zhí)行完畢后的返回值 //var user_name = getUserName(); //此時(shí)user_name就相當(dāng)于是函數(shù)getUserName var user_name = getUserName; alert(user_name); //相當(dāng)于user_name.toString()獲取函數(shù)的源代碼 alert(user_name.length); //獲取函數(shù)的參數(shù)的個(gè)數(shù) var result = user_name(); //調(diào)用該函數(shù) alert(result); </script> (9) 調(diào)試與排錯(cuò):可以利用vs和chrome、firefox瀏覽器中設(shè)置斷點(diǎn)進(jìn)行調(diào)試 (1) 函數(shù)聲明與變量聲明預(yù)解析 ① 函數(shù)預(yù)解析:在頁(yè)面中的所有函數(shù)定義語(yǔ)句,,都會(huì)在代碼執(zhí)行前進(jìn)行“預(yù)解析”,,在“預(yù)解析”的時(shí)候,對(duì)于重名的函數(shù)就會(huì)用最后一次定義覆蓋所有前面的定義。 ② 變量聲明預(yù)解析:對(duì)于在函數(shù)內(nèi)部定義的局部變量,,無(wú)論是定義在函數(shù)的任何位置,,在函數(shù)執(zhí)行前也會(huì)進(jìn)行“預(yù)解析”,會(huì)把變量聲明語(yǔ)句“置頂”解析,。也就是說(shuō)無(wú)論變量聲明語(yǔ)句在函數(shù)的任何地方,,都會(huì)被認(rèn)為是寫(xiě)在了函數(shù)一開(kāi)始的部分,所以后面的語(yǔ)句都可以直接使用這些變量了,。但注意:這里只會(huì)把變量聲明的語(yǔ)句“預(yù)解析”,,賦值語(yǔ)句并不會(huì)一同被“解析”。 (2) 匿名函數(shù) 將函數(shù)定義語(yǔ)句當(dāng)做一個(gè)表達(dá)式來(lái)處理,,它可以減少函數(shù)命名問(wèn)題,,并且減少文件的字節(jié)數(shù)。
(3) 數(shù)組 ① 介紹:js中通過(guò)Array對(duì)象創(chuàng)建數(shù)組,,它是集成數(shù)組、ArrayList集合,、Hashtable集合,、棧集合,、隊(duì)列集合等的一個(gè)“超強(qiáng)綜合體” ② 使用:var ages = new Array();ages[0]=10;ages[1]=16; 通過(guò)for循環(huán)來(lái)遍歷:for(var i=0;i<ages.length;i++) 注:用length來(lái)獲取數(shù)組元素中的個(gè)數(shù) ③ 其它聲明方式 new Array(size)//聲明數(shù)組初始長(zhǎng)度為size new Array(a,b,c…)//聲明數(shù)組并設(shè)置初始值 推薦使用數(shù)組字面量:var arr =[12,‘ok’,true] ④ 沒(méi)有多維數(shù)組,,只能嵌套數(shù)組 :var arr = [12, ‘ok’,[‘a(chǎn)bc’,false]] ⑤ Array的方法:toString,join,,reverse,、concat、sort,、push,、pop、shift,、unshift,、slice、splice等等 ⑥ Array鍵值對(duì)集合:鍵值對(duì)聲明 var arr={'dawei':'大衛(wèi)','jim':'吉姆'}; Array數(shù)組本身就是一個(gè)鍵值對(duì)集合,,“普通數(shù)組”,,即通過(guò)下標(biāo)來(lái)獲取元素,只不過(guò)是一個(gè)“特殊的鍵值對(duì)集合”而已,,把下標(biāo)作為“鍵”,,把數(shù)組元素最為值。
遍歷: for (var key in arrayDict) { console.log(key + '......' + arrayDict[key]); } (4) 面向?qū)ο?/p> ① 介紹
② 構(gòu)造函數(shù)
③ js模擬“類(lèi)” -->prototype屬性 prototype是“函數(shù)對(duì)象”的屬性,可實(shí)現(xiàn)類(lèi)似C#中擴(kuò)展方法的功能,; 注:不要為“內(nèi)置對(duì)象”隨便添加新成員,。防止混亂,可以對(duì)自定義對(duì)象通過(guò)該方式來(lái)添加新成員,。 prototype原理圖: -->繼承 js中的“繼承”一般通過(guò)prototype來(lái)實(shí)現(xiàn)的,,也可以通過(guò)apply和call來(lái)進(jìn)行模擬實(shí)現(xiàn) 任何類(lèi)型都直接或間接繼承自O(shè)bject function Person(){ } Person.prototype.hello = "hello"; Person.prototype.sayHello = function(){ alert(this.hello); } function Child(){ } Child.prototype = new Person();//這行的作用是:將Parent中將所有通過(guò)prototype追加的屬性和方法都追加到Child,從而實(shí)現(xiàn)了繼承 Child.prototype.world = "world"; Child.prototype.sayWorld = function(){ alert(this.world); } var c = new Child(); c.sayHello(); c.sayWorld(); 擴(kuò)展:《js中call與apply用法》,、《js繼承的實(shí)現(xiàn)》 (5) 函數(shù)閉包(變量作用域問(wèn)題) 在一個(gè)函數(shù)內(nèi)部又定義了一個(gè)函數(shù),,內(nèi)部函數(shù)函數(shù)能訪(fǎng)問(wèn)外部函數(shù)作用域范圍內(nèi)的變量,這時(shí)這個(gè)內(nèi)部函數(shù)就叫做閉包,。無(wú)論這個(gè)內(nèi)部函數(shù)在哪里被調(diào)用都能訪(fǎng)問(wèn)的到外部函數(shù)作用域中的那些變量 作用:匿名自執(zhí)行函數(shù),、實(shí)現(xiàn)緩存、實(shí)現(xiàn)封裝,、實(shí)現(xiàn)面向?qū)ο笾械膶?duì)象 擴(kuò)展:《js閉包的作用》 |
|
來(lái)自: goldbomb > 《javascript》