前言 最近迷茫了一段時間,不知道應該從何處開始學習前端知識,好像這種狀態已經持續了一年了,天天也在看前端的東西,但是記住的多少或者說在腦中一團糟,沒有什麼清晰的概念。最近加入了jQuery源碼交流群( 239147101),雖然有時候在群裡不說話,或者在裡面扯扯淡,在裡面學到了不少知識,群主Aaron是個好人,葉小釵是個牛人,告訴我要堅持寫部落格,謝謝群裡的哥們們。感覺剛開始寫無從下手,希望以後越來越好,大家盡量給我提意見哈。 PS:239147101群裡的學習氛圍特別濃,無論是技術還是人生,吐槽人生,吐槽公司,吐槽12306。最近群裡興起了一股學習英語風,拜Aaron所賜,群主天天學英語,如果想提高技術的同時學習英語,那麼歡迎大家加入。請大家注意一下,群裡的人都是用工作的人,天天都是很忙的,有些簡單的知識自己去網上找找,想要實現的小功能什麼的自己多琢磨一下,不要什麼問題都在群裡問,大家都很忙的,當然一些實在不懂的地方可以請教大家。提問題要理性,大家都是為了進步,記住,提出你無論怎麼都搞不定的問題。 基本概念 文法 其實對於學過C語言的同學來說,學習其他語言還是比較容易的,因為C是經典的程式設計語言,許多後來的語言都是借鑒了C語言的寫法,Javascript同樣也是如此。 區分大小寫 這個很好理解,javascript中一切都是區分大小寫,包括變數,函數名,操作符。例:var a=0和var A=1不是同一個變數。 標識符 標識符就是變數、函數、屬性的名字,這個也和其它的語言差不多。 第一個字元必須是字母、數字和底線或者一個$其它隨便了,數字、字母、底線、$都行注釋 同樣是C語言的風格,單行注釋和塊級注釋。 // 單行注釋以兩個斜杠開頭/* *塊級注釋一個斜杠和一個星號開頭,一個星號和一個斜杠結尾 */語句 ECMAScript的語句是以一個分號結尾的,不寫分號的話,解析器會確定結尾,在這裡我們記住必須每一個語句必須以分號結尾就好了,如果想javascript語句具有較好的可讀性的話就用C語言那一套就好了。例如,條件控制語句if,即使後面只有一條語句也要使用花括弧。 複製代碼1 //不推薦使用2 if(b_var)3 console.log(b_var);4 //推薦5 if(b_var){6 console.log(b_var);7 }複製代碼關鍵字和保留字 關鍵字和保留字就是系統自己使用的或者以後可能會使用的有特殊用途的字元,我們不能自己聲明和使用這些標識符了。 關鍵字 保留字 上述的關鍵字和保留字可能不是很全,其實我們也不必記住這些東西,大概知道就行。假如我們真的忘記了這些特殊的標識符,在應用中使用它聲明了變數什麼的,記住報什麼錯誤,找到它改了就ok了,如果把關鍵字用作變數名或函數名,可能得到諸如 "Identifier Expected"(應該有標識符、期望標識符)這樣的錯誤訊息。 例子:chrome IE strict 模式 除了正常運行模式,ECMAscript 5添加了第二種運行模式:strict 模式(strict mode),使得Javascript在更嚴格的條件下運行。由於javascript是鬆散型語言,有些地方肯定沒有嚴格的限制,引入這種模式就是為了使javascript更加的嚴格,規範,安全。使用strict 模式有兩種方式: 要想在整個指令碼中啟用strict 模式,則需要在頂部加上代碼 1 "use strict"; 要想一個函數在strict 模式下執行則需在函數內部的頂部加上代碼 function useStrict(){ "use strict"; //函數內容 } 變數 javascript的變數是鬆散類型的,也就是說一個變數可以存任何類型的資料,這在C語言中是不允許的,《javascript進階程式設計》中說每個變數只是儲存一個值的預留位置而已。定義一個變數使用關鍵字var。 複製代碼1 //定義變數2 var test;3 //賦值4 test = 1;5 //改變test的值6 test = 2;7 //改變test的類型和值8 test = "string";複製代碼定義一個變數之後可以隨便更改它的類型和值,但是不推薦這種做法。另外,使用var定義的變數是在所在範圍的局部變數。 複製代碼//全域變數,全域使用var global = 1;//等於gloabal = 1,但是不推薦function test(){ //局部變數,只能在函數內部使用 var inner = 2; //函數內部使用var關鍵字定義變數相當於定義一個局部變數,strict 模式下會報錯 outer = 3;}test();//函數必須執行,執行之後內部的變數才能被定義alert(inner);//報錯alert(outer);//正常複製代碼也可以一次定義多個變數,和C語言一樣 var name = "allenxing", age = 25, sex = "male"; 附加一點前幾天看到的,變數聲明的提前 複製代碼1 var y= 1;//定義變數2 function test(){3 console.log(y);//訪問局部變數4 var y = 2; //定義一個和全域變數同名的局部變數 5 }6 test();//輸入undefined複製代碼在函數的內定義的變數會提升位置,var y = 2等價於var y; y = 2;定義一個變數無論在什麼位置會提升到該變數所在範圍的頂部,而賦值保留在原位置,即 複製代碼1 var y= 1;//定義變數2 function test(){3 var y;//提升位置,此時y為undefined4 console.log(y);//訪問全域變數5 y = 2; //定義一個和全域變數同名的局部變數6 console.log(y);7 }8 test();//輸出undefined和2複製代碼資料類型 javascript中有五種單一資料型別和一種複雜資料類型Object,這五種簡單類型分別為Undefined,Boolean,Number,String,Null。Array不屬於基礎資料型別 (Elementary Data Type),Array是這幾種資料類型組合而成的。 typeof typeof操作符就是檢驗資料類型的,它的傳回值是一個字串,可能為:"undefined","number","boolean","string","object","function"。 View CodeUndefined undefined類型比較簡單,一個變數聲明但是未定義時就為undefined,或者顯示的聲明變數的值為undefined。注意,對未聲明的變數執行typeof操作同樣會得到undefined,而對未定義的變數執行除typeof以外的操作會報錯。 View CodeNull null是表示一個Null 物件指標,所以typeof會返回"object"。注意看下面 View CodeBoolean Boolean類型主要用在控制語句中,Boolean類型有兩個值true和false,雖然只有兩個值但是其他類型可以轉化為Boolean類型,要通過Boolean()函數進行轉化。 Boolean true false String 非空 ""Number 非零 0 NaNUndefined 不適用 undefinedObject 非Null 物件 null Number Number類型也和C語言中的型別宣告差不多,可以八進位和十六進位的,主要是總結一下數值轉換。 View Code注意:不要檢測一個特定的浮點數值,由於浮點數值的存在精度因素。例子:0.2 +0.1等於0.30000000000000004而不是0.3。 數值裝換的規則其實也不用我們死記硬背,其實很多都符合我們的常規想法。空就是0,true就是1,false就是0,null是0,undefined未定義就是NaN,字串的裝換也很簡單,從左往右依次尋找可以轉化的數值,儘可能多的尋找,從頭找起就是有多少找多少,如果這個字串是以非數位字串開頭的就為NaN。簡單的說就是:如果第一個是數字字元,則解析第二個,直到遇到一個非數字字元。但是現在不能解析八進位的字串,會忽視前置字元為零的存在。主要函數是Number()和parseInt(),這兩個函數的作用是一樣的,但是parseInt更合理一些,parse只解析字串,parseInt會忽略字串前面的空格,直到第一個非空白字元,這樣parseInt轉換Null 字元為NaN。 View Code對象轉換數值,則會調用對象的valueOf()方法,轉換該方法的傳回值,《javascript進階程式設計》說如果為NaN,則再調用toString()方法,在轉化它的傳回值,但是我chrome下測試顯示,如果轉化valudeOf()的傳回值為NaN結果就為NaN,沒有重寫valueOf()時,轉換的是toString()的傳回值。求大神指導。。。。。。。。 View CodeString String類型可以用單引號或雙引號表示,沒啥區別。var str = "string",它有一個屬性length,返回字串的長度,str.length等於6。 String創立之後,字串的值是不可改變的。要改變必須銷毀原來的字串,再用新的字串賦值給這個變數。例如: View Code其他變數轉為String類型,每一個類型會有一個toString()方法,除了Null和Undefined。toString()大多數不帶參數,Number類型轉換字串的時候可以帶參數,表示轉換多少進位。例子:var n = 10;alert(n.toString(2));返回“1010”。 還有一個轉換字串的String()方法,在不知道是不是Null和Undefined類型的情況下,使用String()方法,變數有toString()方法就調用它。 View CodeObject object是所有對象的基礎,建立一個對象和其他語言差不多,var obj = new Object();每一個object對象執行個體都會有一些屬性和方法。 constructor 儲存建立當前對象的函數,new 後面的函數hasOwnProperty(proname) 檢測當前的執行個體中是否有proname這個屬性isPrototypeOf(obj) 檢測當前對象是否是傳入對象的原型toLocalString() 返回當前執行環境對應的字串toString() 返回字串valueOf() 返回對象的字串,數值或布爾值,通常與toSting()傳回值一樣propertyIsEnumerable(proname) 檢測proname屬性是否可以被枚舉 小結