1.JS中的是非非 JS是一門電腦程式語言,是一門動態語言也稱為腳本語言,是解析型程式語言。為什麼是腳本?因為他本身不能執行,就是沒有main函數或主程式的入口,必須被他的宿主環境,也就是解析環境解析執行他。為是什麼是解析型?因為JS不會進行編程,鏈接,彙編等一系統的過程生成某個文件,再執行,他就是以字符串形式加載執行..
2.JS中的真真假假 空,null,undefined,false,0,””,'',NaN都為假,其他都為真
3.函數,類,對象,構造器有什麼區別? 答:在js中函數,類,對象,構造器可以說是沒有任何區別的,我們可以說函數既為對象,對象既為類,類既為構造器。但一般情況下,我們稱物件為那個類別的實例,這是為了減少混亂。
function Person(){
}
var person = new Person();
//Person我們可以稱為函數,類,對象,建構器(不含參數)
//person稱為對象的引用
4.懂this關鍵字,你懂JS五分之一.
this永遠指向呼叫該方法(函數)的那個物件.(必背)
首先要知道this是什麼?
this就是js中的一個物件。是一個對象,不是一個函數,此是的對像你可以看作是一個對象的引用,引用誰?引用呼叫方法的那個物件.
this這個物件存在哪裡?在JS程式碼中,一般存在於函數之中。如果你把this放到<script>標籤中,你可以試試window==this,印什麼?為什麼? <BR>剖析this關鍵字<BR><div class="codetitle"><span><a style="CURSOR: pointer" data="23656" class="copybut" id="copybut23656" onclick="doCopy('code23656')"><U>複製程式碼 程式碼如下:<div class="codebody" id="code23656"> <BR>function ready( <BR>alert(this==window); <BR>} <BR>ready(); <BR> <BR>此時打什麼? true,為什麼? <BR><div class="codetitle"><span><a style="CURSOR: pointer" data="1630" class="copybut" id="copybut1630" onclick="doCopy('code1630')"><U>複製程式碼 程式碼如下:<div class="codebody" id="code1630"> <BR>function Person(){ <BR>this.name= '張三'; <BR>alert(this==window); <BR>} <BR>new Person(); <BR> <BR>此時印什麼? false,為什麼? <BR>把程式碼加長點.加上一個var perso= <BR>var person = new Person(); <BR>全世界的人都知道person引用了new Person產生的那個物件。 new Person創建的是一個JS實例對象,我們就可以綁定屬性和方法. <BR>看下面這段程式碼<BR><div class="codetitle"><span><a style="CURSOR: pointer" data="41151" class="copybut" id="copybut41151" onclick="doCopy('code41151')"><U>複製程式碼 程式碼如下:<div class="codebody" id="code41151"> <BR>fn=function(){ <BR>} <BR>fn.ready=function(){ <BR>alert(this== fn); <BR> } <BR> <BR>當呼叫fn.ready()的時候印什麼? true ,為什麼? <BR>很奇怪,this現在等於一個函數了..為什麼? <BR><STRONG>5.JS中靜態方法和屬性將助你一臂之力. <BR>什麼是靜態.顧名思意:就是不動了,JS中不動的方法是什麼?就是不需要建立實例,直接可以透過類別名稱呼叫方法,哪裡都沒有動。方法就呼叫了。不需要任何額外的程式碼。這只是片面之言。所謂靜態:就是屬於類別的屬於類別本身的特徵. <BR>Js中類別既為對象,何不能直接綁定屬性和方法。當然可以. <BR><div class="codetitle"><span><a style="CURSOR: pointer" data="22588" class="copybut" id="copybut22588" onclick="doCopy('code22588')"><U>複製程式碼 程式碼如下:<div class="codebody" id="code22588"> <BR>fn=function({){ <BR><BR> <BR>fn=function(){ <BR> } <BR>fn.name='張三'; <BR>fn.getName=function(){ return fn.name; <🎜>} <🎜><🎜><BR>這也行,但為什麼還要new 的過程,全都這樣綁定不就可以了嗎?思考 <BR><STRONG>6.prototype和constructor的在JS框架中的影響 <BR>prototype為原型,是一個物件。 ,。 <BR>constructor為建構器,是一個函數<BR>到現在為止,你要分清楚,什麼時候的對象為對象,什麼時候的對像是一個函數.也難為JS解析器,能解析運行如此靈活的代碼。 <BR>prototype可以說他是一個類別的靜態的屬性,他指向這個物件的實例。換句話說prototype是一個物件。 prototype指向的物件和我們new的物件有何不同?建立了一種等價橋樑關係,但不是同一個。當我們在函數prototype上綁定屬性的時候,那麼屬性和值就綁定到了prototype物件上,並沒有正真的綁定到那個物件上去。當需要存取那個物件上的這個屬性的時候,JS解析器,首先會去從物件本身去找這個屬性,然後再到原型物件上找。 <BR><div class="codetitle"><span><a style="CURSOR: pointer" data="4834" class="copybut" id="copybut4834" onclick="doCopy('code4834')"><U>複製代碼 代碼如下:<div class="codebody" id="code4834"> <BR>function Person(){ <BR>} <BR> var person = new Person(); <BR>person.name=”張三”; <BR>Person.prototype.name=”李四”; <BR>alert(person.name); <BR>delete person. name; <BR>alert(person.name); <BR> <BR>constructor指向一個物件的建構器。 (什麼是構造者?自己去複習。),由此可以看出他是一個物件層級的屬性。也就是要使用constructor這個屬性,必須需要一個物件。 <BR>那麼prototype是一個物件有沒有constructor屬性?當然有,既然constructor是指構造器,那有沒有一個prototype屬性?當然有,以此類推,下面這兩段程式碼是正確的. <BR>constructor.prototype.constructor.prototype.constructor… <BR>prototype.constructor.prototype.constructor.prototype… <BR>其實我也不知道到底可以連多長?有興趣可以試試。順便告訴你用遞歸演算法。 <BR>在眾多的JS程式碼中,當我們已知一個對象,要求他的構造器,或已知一個構造器,求他的對象。應入門了。 <BR><STRONG>7.==和===將判斷進行到底. <BR>==和===神像形不像.不要去考慮,一眼就看出是做斷判是否相等。 <BR>有木有差別? <BR>==判斷變數是否相等。 <BR>===判斷變數的值相等。 <BR>以此類推:====用來幹嘛的? ?用來報錯的.你懂的.這裡只想告訴你,只有==和=== <BR>JS中變數是弱型的,都懂。 <BR><div class="codetitle"><span><a style="CURSOR: pointer" data="31537" class="copybut" id="copybut31537" onclick="doCopy('code31537')"><U>複製程式碼 程式碼如下:<div class="codebody" id="code31537"> <BR>var a=3; <BR>var b=” 3”; <BR>alert(a==b); <BR>JS中變數的值是強型別的。你懂的. <BR>var a =3; <BR>var b =”3”; <BR>alert(a===b); <BR><BR>都是var 類型的變量,但他們的值不一樣,一個是整形,一個是字串型. <BR>var類型和var類型相比,當然是true,整形和字串型比,當然是false. <BR>==用來比較他們值是否一樣。不會是計較值的類型,只要他們的變數是var類型就可以了。當然是這廢話,難不成,你不還能宣告第二種變數類型的變數? . <BR>===用來比較,會去判斷他們的值是否為相同類型。如果不是,沒有的比較。 JS中變數的值是強型的,有整形,字串,數字,布林等. <BR><STRONG>8.typeof和instanceof完成了判斷未成的使命 <BR>typeof用來判斷基本數據類型<BR>instanceof 用來判斷物件類型是否為某一個類型號<BR><STRONG>9.5種繼承讓你如虎添翼. <BR>i.物件冒充<BR>ii.apply <BR>iii. call <BR>iv.prototype <BR>v.for循環方式<BR>用法:永遠只須記住,JS中的繼承只是屬性和方法的拷貝. <BR><STRONG>10.DOM模型結構改變你的思想 <BR>DOM是一種思想,一種將資料以樹狀結構資料的思想。學習DOM只需要掌握任何一個節點都有一個父節點和0到多個子節點.任何一個節點都有一個頁面上的標籤表現形式和一個內存對應著一個標籤對象.頁面只是展示數據的地方,內存中才是DOM對象資料保存地方。任何一個DOM物件只能有一個父節點物件。父子關係可以隨時改變。 <BR>必須: <BR>取得物件:查<BR>物件操作:增,修,刪除<BR>內容操作:innerHTML,innerText等<BR>事件操作:mouse,key <BR>樣式操作:id, tag,class <BR>屬性操作:attribute <BR><STRONG>11.回呼函數減少寫程式碼 <BR>什麼是回呼函數? <BR>JS中函數名是用來識別一個函數的。既我們可以傳遞給某個函數一個函數名(函數名柄),然後由那個函數來自動呼叫我們的函數完成相關的處理。 <BR>呼叫者與被呼叫者分開,我們不需要關心呼叫者,和被呼叫者。回調可用於通知機制,事件。 <BR><STRONG>12.函數和arguments <BR>函數名稱就是函數的句柄,指針,函數名是唯一的,這也成就了JS中沒有函數重載。只有函數覆蓋。函數名才是唯一標識函數的。 <BR>永遠需牢訪,JS中的函數呼叫就是在函數名稱後面加對括號() <BR>函數呼叫參數可有可無,無論什麼情況下,參數都會保存在函數體中的arguments物件中,你可以直接使用他,他是一個對象,參數是以數組形式存放。 <BR><STRONG>13.閉包(匿名函數)為開發開闢了捷徑 <BR>閉包是函數內調用函數外的參數,一般也可稱為匿名函數,但兩者有所不同。 <BR>閉包的價值在於可以作為函數物件或匿名函數,對於型別系統而言這就意味著不僅要表示資料還要表示程式碼。支援閉包的多數語言都將函數作為第一級對象,就是說這些函數可以存儲到變量中、作為參數傳遞給其他函數,最重要的是能夠被函數動態地創建和返回. <BR>匿名函數減少了變數名稱的衝突,為沒有權限作用域的JS提供了權限作用域。當我們需要提供一個接口,但又不想讓這個接口對象為全局變量就需要用匿名函數: <BR>(function(){ <BR>局部代碼,外部永遠無法訪問,除非你提供一個入口<BR> })();</script>