JS編程必備

原文鏈接:http://www.2cto.com/kf/201211/170998.html

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,打印什麼?爲什麼?
 
剖析this關鍵字
function ready(){
         alert(this==window);
}
 
ready();
此時打什麼?true,爲什麼?
 
function Person(){
         this.name=’張三’;
         alert(this==window);
}
 
new Person();
此時打印什麼?false,爲什麼?
把代碼加長點.加一個var perso=
var person = new Person();
全世界的人都知道person引用了new Person產生的那個對象。new Person創建的是一個JS實例對象,我們就可以綁定屬性和方法.
 
                   看下面這段代碼
fn=function(){
}
 
fn.ready=function(){
         alert(this== fn);
}
當調用fn.ready()的時候打印什麼?true ,爲什麼?
十分奇怪,this現在等於一個函數了..爲什麼?
5.       JS中靜態方法和屬性將助你一臂之力.
什麼是靜態.顧名思意:就是不動了,JS中不動的方法是什麼?就是不需要創建實例,直接可以通過類名調用方法,哪裏都沒有動。方法就調用了。不需要任何額外的代碼。這只是片面之言。所謂靜態:就是屬於類的屬於類本身的特徵.
Js中類既爲對象,何不能直接綁定屬性和方法。當然可以.
fn=function(){
}
 
fn.name=’張三’;
fn.getName=function(){
       return fn.name;
}
 
這也行,但爲什麼還要new 的過程,全都這樣綁定不就可以了嗎?思考
6.       prototype和constructor的在JS框架中的影響
prototype爲原型,是一個對象。,。
constructor爲構造器,是一個函數
到現在爲止,你要分清楚,什麼時候的對象爲對象,什麼時候的對象是一個函數.也難爲JS解析器,能解析運行如此靈活的代碼。
prototype可以說他是一個類的靜態的屬性,他指向這個對象的實例。換句話說prototype是一個對象。prototype指向的對象和我們new的對象有何區別?建立了一種等價橋樑關係,但不是同一個。當我們在函數prototype上綁定屬性的時候,那麼屬性和值就綁定到了prototype對象上,並沒有正真的綁定到那個對象上去。當需要訪問那個對象上的這個屬性的時候,JS解析器,首先會去從對象本身上去找這個屬性,然後再到原型對象上找。
function Person(){
       
}
var person = new Person();
person.name=”張三”;
Person.prototype.name=”李四”;
alert(person.name);
delete person.name;
alert(person.name);
 
constructor指向一個對象的構造器。(什麼是構造器?自己去複習。),由此可以看出他是一個對象級別的屬性。也就是要使用constructor這個屬性,必須需要一個對象。
那麼prototype是一個對象有沒有constructor屬性?當然有,既然constructor是指構造器,那有沒有一個prototype屬性?當然有,以此類推,下面這兩段代碼是正確的.
constructor.prototype.constructor.prototype.constructor……
                            prototype.constructor.prototype.constructor.prototype……
                            其實我也不知道到底可以連多長?感興趣可以試一下。順便告訴你用遞歸算法。
在衆多的JS代碼中,當我們已知一個對象,要求他的構造器,或者已知一個構造器,求他的對象。應入門了。
7.       ==和===將判斷進行到底.
==和===神像形不象.不要去考慮,一眼就看出是做斷判是否相等。
有木有區別?
==判斷變量是否相等。
===判斷變量的值相等。
以此類推:====用來幹嘛的??用來報錯的.你懂的.這裏只想告訴你,只有==和===
 
JS中變量是弱類型的,都懂。
         var a=3;
         var b=”3”;
         alert(a==b);
JS中變量的值是強類型的。你懂的.
         var a =3;
         var b =”3”;
         alert(a===b);
                   都是var 類型的變量,但他們的值不一樣,一個是整形,一個是字符串型.
                   var類型和var類型相比,當然是true,整形和字符串型比,當然是false.
==用來比較他們值是否一樣。不會是計較值的類型,只要他們的變量是var類型就可以了。當然是這廢話,難不成,你不還能聲明第二種變量類型的變量?.
===用來比較,會去判斷他們的值是否爲同一類型。如果不是,沒有的比較。JS中變量的值是強類型的,有整形,字符串,數字,布爾等.
8.       typeof和instanceof完成了判斷未成的使命。.
typeof用來判斷基本數據類型
instanceof 用來判斷對象類型是否爲某一個類型號
9.       5種繼承讓你如虎添翼.
                         i.              對象冒充
                       ii.              apply
                      iii.              call
                      iv.              prototype
                       v.              for循環方式
          用法:永遠只須記住,JS中的繼承只是屬性和方法的拷貝.
10.   DOM模型結構改變你的思想。
DOM是一種思想,一種將數據以樹狀結構數據的思想。學習DOM只需要掌握任何一個節點都有一個父節點和0到多個子節點.任何一個節點都有一個頁面上的標籤表現形式和一個內存對應着一個標籤對象.頁面只是展示數據的地方,內存中才是DOM對象數據保存地方。任何一個DOM對象只能有一個父節點對象。父子關係可以隨時改變。
必須:
         獲取對象:查
         對象操作:增,修,刪
         內容操作:innerHTML,innerText等
         事件操作:mouse,key
         樣式操作:id,tag,class
         屬性操作:attribute
11.   回調函數減少編寫代碼.
什麼是回調函數?
         在JS中函數名是用來標識一個函數的。既我們可以傳遞給某個函數一個函數名(函數名柄),然後由那個函數來自動調用我們的函數完成相關的處理。 www.2cto.com
         調用者與被調用者分開,我們不需要關心調用者,和被調用者。回調可用於通知機制,事件。
12.   函數和arguments
函數名就是函數的句柄,指針,函數名是唯一的,這也成就了JS中沒有函數重載。只有函數覆蓋。函數名纔是唯一標識函數的。
永遠需牢訪,JS中的函數調用就是在函數名後面加對括號()
函數調用參數可有可無,無論什麼情況下,參數都會保存在函數體中的arguments對象中,你可以直接使用他,他是一個對象,參數是以數組形式存放。
13.   閉包(匿名函數)爲開發開闢了捷徑
閉包是函數內調用函數外的參數,一般也可稱爲匿名函數,但兩者有所不同。
閉包的價值在於可以作爲函數對象或者匿名函數,對於類型系統而言這就意味着不僅要表示數據還要表示代碼。支持閉包的多數語言都將函數作爲第一級對象,就是說這些函數可以存儲到變量中、作爲參數傳遞給其他函數,最重要的是能夠被函數動態地創建和返回.
匿名函數減少了變量名稱的衝突,爲沒有權限作用域的JS提供了權限作用域。當我們需要提供一個接口,但又不想讓這個接口對象爲全局變量就需要用匿名函數:
(function(){
         局部代碼,外部永遠無法訪問,除非你提供一個入口
})();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章