JavaScript
什麼是JS:
1.javascript是一種侵入在網頁中的腳本語言,它是由瀏覽器解析運行的。
2.javascript是一種 基於對象 和 事件 驅動型語言。
什麼是基於對象:
基於對象不具有封裝、繼承、多態。
JS裏面的面向對象都是僞面向對象。
javascript的解析:
javascript是有文本字符串的形式供瀏覽器解析的。javascript的解析速度的java的1/50倍,是C語言的1/500倍。
語法:
javascript標示符:
1.它的變量是區分大小寫的。
2.它的變量是弱類型的。
3.每一行結尾的分號(;)都是可有可無的。
值類型:
原始值:存儲在棧中的簡單數據,它們的值就是變量的值,直接存放在變量的訪問位置
原始值的數據類型:
1.undefined(String,它的長度是可變的)
2.Null(是由undefined派生出來的)
3.Boolean(true、false)
4.Number(數字類型)
boolean、String、number是僞對象(擁有對象的一些特性、屬性和方法)
var b = new Boolean(false);
b = Boolean(false);
var n = new Number(123);
Number n = 123;
將一個數字轉換爲boolean型:
var num = Boolean(123);
var b = Boolean("string");
parseInt();
parseFloat();
引用值(指針):可以指向一個變量,也可以指向一個對象,還可以指向一個函數。存儲在堆中的對象,存儲在變量處的值是一個指針,它指向存儲對象的內存處
object類型:
javascript中所有的對象(類)都是從object繼承而來
object類型裏面的屬性:
1.prototype:對該對象的原型的引用
2.constructor:構造器的引用
算術運算符:
&&、||、==
流程控制:
if
else
while
swith等、和java裏面的一樣。
元運算符
1.delete
刪除對以前對象屬性和方法的引用
2.void(這裏放的是對象)
如果是原始值的話就返回一個undefined
函數(function)
函數的定義:它是一個特殊的引用類型,函數是一組可隨時運行的語句,所有的函數都是從function類繼承過來的。
函數如果沒有返回值,那麼就返回undefined
所有的函數中,會默認的給你一個arguments對象,把函數裏面所有的形參(以數組的形式)放在這個arguments對象裏面
function 函數名 (參數){}
javascript中有值傳遞和引用傳遞
引用傳遞:函數名永遠都是指向函數的指針
function();是一個匿名函數
eval():它是一個萬能方法
閉包
定義:閉包就是函數調用外部定義的變量
2010年7月28日 09:44:08
對象基礎
定義:javascript對象是屬性和方法的無序集合,它就相當於是一個集合
javascript有四種能力:封裝、繼承、多態、聚集
javascript裏面所有的權限都是公有的
繼承:
主要有兩種,重寫和重載,在javascript裏面重寫和重載都是方法的覆蓋,把父類裏面的屬性和方法拷貝到子類裏面了,有相同的話就把子類覆蓋了
聚集:
把一些屬性聚集到一個類裏面,一個類擁有裝載和引用原始值和引用值的能力
javascript對象的生成和實例化:
var v = new Object();對象後面的這個括號是可有可無的
n = null;
javascript提供的對象分爲三大類:
本地對象、
獨立於數組環境(提供生命的環境),有javascript(ECMAScript)實現提供的對象
它提供了:object,afunction,Function、Array、Date、String、Boolean;
Array對象:是javascript中性能最高的一個對象。
內置對象、
定義:它也是由javascript實現提供的,它也是獨立於數組環境的對象,它是由瀏覽器實例化之後,你只要拿過來用就可以了
Global對象:比如說parseInt我們就可以直接用,因爲它是global裏面內置提供給對象的。它不能被其它對象引用
宿主對象
定義:所有的非本地對象都是宿主對象,就是由數組環境提供的(瀏覽器),所有的標籤都對應一個對象,比如<p></p>這樣的標籤就是對應着一個對象
DOM(document object model)和BOM(browser object model)都是數組對象
object可以使用{}來簡寫
綁定屬性:
var o = new Object();
o.name="value";
o["屬性名"]="value";
晚綁定:
定義:編譯器或者解釋器在創建對象之後,將屬性綁定
早綁定:
定義:編譯器或者解釋器在創建對象之前,將屬性綁定
在javascript裏面只有變量,而沒有屬性,所以,方法之外不能訪問變量,如果要訪問,就要使用this關鍵字
例:
function Student(){
this.name = "zhangsan";
this.age = 18;
}
var s = new Student();
document.write(s.name);
-*-*-*-*-*-*-*-*-*-*-*-*-*-重點*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
this:
this永遠指向該方法的那個對象
創建對象的方式:
function a(){
}
a = function(){
}
var o = new Object(){
}
var o = {
}
原型方式:
函數有一個原型屬性,原型有一個構造器屬性,構造器屬性裏面還有原型屬性,這兩個屬性將無限循環
構造器.prototype.屬性:將屬性綁定到原型上面
2010年7月29日 09:37:52
BOM(瀏覽器對象模型):
BOM提供了獨立於內容,而與瀏覽器窗口進行交互的對象
所有的BOM和DOM都不能用來繼承
Window →|document → |links
|images
|location
|Frames :是一個框架集合
|History :操作瀏覽器的,比如說瀏覽器上面的前進、後退等
|location 連接
|navigator
|screen
DOM(文檔對象模型):
每個html裏面的節點都對應一個對象
獨立於網頁內容的
Form表單:
表單是一個高級html組件
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
2010年7月31日 09:41:02
事件
定義:事件是DOM模型的一部分,
事件也是一個特殊的方法
事件和函數是息息相關的
事件觸發函數,而函數監聽事件(一個事件對應一個函數)
觸發事件,調用函數(事件不是通過瀏覽器直接得到的,而是通過操作系統得到的)
事件監聽函數/處理函數:
定義:事件是用戶或瀏覽器進行特定的行爲,用於響應某個事件而調用的函數
事件函數分配方式:
1.javascript
2.HTML
它不屬於HTML事件,它只是分配到HTML裏面的
所有HTML裏面的標籤都有
事件分爲:
1.鼠標事件:用戶進行特定操作的時候觸發
2.鍵盤事件:使用鍵盤進行操作的時候觸發
|按下事件
|按鍵事件
|放開事件
3.HTML事件:窗口頁面發生改變的時候觸發
突發事件:底層DOM結構發生改變的時候觸發
HTML事件和鼠標事件、鍵盤事件沒有一點關係的
事件原理
是一個樹狀結構圖,根節點就是window,所有的標籤和事件都是它的子節點,它是通過冒泡來一層一層往上執行,最終通過window來完成這個事件
所有的事件都是通過第三方(window)來完成的
模塊對話框:
當你產生一個對話框之後,別的事件就不能對這個對話框進行操作了
ATM事件
javascript事件
2010年8月2日 09:46:03
正則表達式
正則表達式是通過ECMAScriptRegExp來實現的
正則表達式是匹配模式額外的指令
g(global):代表全部命令(全局匹配)
i:代表不區分大小寫
multiline:多行
var re = new RegExp("",""); 第一個參數就是匹配類型,第二個參數就是命令
var re = /匹配類型/命令; 一定要有嚴格的規範
RegExp對象裏面就只有二個方法使用,一個就是test(),還有exect()方法,其它的都是在String對象裏面。
如果不加全局,當匹配到第一個的時候就不會往下匹配,返回真。
簡單模式: 一個正則表達式具有很多組成部分,這些組成部分包括匹配模式和命令,如:指定字符、元字符、字符類和量詞等組成的簡單匹配模式
元字符:被正則表達式所佔用的字符就是元字符,如:【(】【[】【{】【\】【^】【$】【?】【+】【*】【.】【}】【]】【)】
(,[,{,\,^,$,?,+,*,.,},],) 中括號裏面的就是元字符
預定義字符:\t,\r,\f,\n,\a,\e...等
字符類:包含在中括號中的字符,告訴正則表達式要匹配其中的某一個,比如說要匹配a到z裏面的某一個字符就使用[a-z]
負向字符類:不包含中括號中的字符,告訴正則表達式呀匹配不在某個範圍內的字符,比如說不要匹配a到z裏面的某個字符就使用[^a-z]
組合字符類:[a-z0-9] 就是說可以匹配a到z和0到9之間的字符a-z和0-9之間不能加空格,因爲空格也算是一個字符
預定義類:
.[^\n\r] :除\n\r以外的字符
\d[0-9]
\D[^0-9]
\w[a-z0-9A-Z]
\W[^a-z]
量詞:表示數量的多少
硬性量詞:指定了數目的多少
軟性量詞:沒有指定數目的多少
? :0次、一次
* :0次、多次
+ :1次、多次
?、*、+都屬於軟性量詞
{n} :指定出現n次
{n,}:出現n次以上
{n,m}:出現n-m次
{n}、{n,}、{n,m}都屬於硬性量詞
量詞分爲:
貪婪的量詞:它首先讀第一個字符串正則匹配,如果第一個不成功,那麼它繼續往下匹配,如果有匹配的話,那麼就把前面的那個字符串刪掉,如果字符串長度不爲0,那麼它就繼續往下匹配
惰性的量詞:首先看第一個字符是否匹配,如果這個字符不夠的話,那麼它繼續讀下一個字符,組成兩個字符,一直這樣下去,如果匹配,就刪除掉,又一次重新開始(只以出現最少次匹配)
支配性的量詞:
選擇類:用在分組裏面的
複雜模式
複雜模式:
定義:它是由分組反向引用前瞻和其它一些強大的正則表達式功能組成
分組:是一對小括號包含一系列的字符組成
邊界:就是字符串的開頭和結尾。比如說我要控制用戶名的長度爲6-12之間,那麼就可以用邊界符^表示開頭,$表示結尾,表示:
var reg =/^\w{6-12}$/gi
電話號碼的正則表達式:
var reg = /^1[358]\d$/g
Email正則表達式:
\w{6,30}@\w{1,10}.\w{1,10}
2010年8月3日 09:56:20
javascript繼承
prototype:
prototype是一個類的原型對象,而對象沒有prototype.
對象冒充:
構造函數使用this關鍵字,用this關鍵字給所有的屬性和方法賦值,(即採用類聲明的構造函數方法,因爲構造函數只是一個函數,所以可使A的構造函數成爲B函數的方法,然後調用它【B函數的那個方法】,B函數就會收到A構造函數中定義的屬性和方法)
繼承的例子:
var A = {
name:'zhangsan',show:function(){
alert(this.name);
}
}
var B = {};
for ( var i in A) {
//alert(i+"="+A[i]);
B[i]=A[i];
}
B.show();
call方法:
代替另一個對象調用它的方法或訪問它的屬性
apply方法:
應用某一對象的一個方法,用另一個對象替換當前對象。和call方法的用法是一樣的,不過這個方法裏面要傳一個參數,這個參數呢是一個數組
原型鏈:
就是用原型方式綁定一個屬性,但是這個屬性是指向另外一個類的實例.
B.prototype = new A(); 不能給它的屬性綁定(B.prototype.a=new A(); 這樣是錯誤的)
大括號裏面的永遠是對象,中括號裏面的永遠是數組,/這個裏面的是正則表達式/