DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> JS編程小常識很有用
JS編程小常識很有用
編輯:關於JavaScript     
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中函數名是用來標識一個函數的。既我們可以傳遞給某個函數一個函數名(函數名柄),然後由那個函數來自動調用我們的函數完成相關的處理。
調用者與被調用者分開,我們不需要關心調用者,和被調用者。回調可用於通知機制,事件。
12.函數和arguments
函數名就是函數的句柄,指針,函數名是唯一的,這也成就了JS中沒有函數重載。只有函數覆蓋。函數名才是唯一標識函數的。
永遠需牢訪,JS中的函數調用就是在函數名後面加對括號()
函數調用參數可有可無,無論什麼情況下,參數都會保存在函數體中的arguments對象中,你可以直接使用他,他是一個對象,參數是以數組形式存放。
13.閉包(匿名函數)為開發開辟了捷徑
閉包是函數內調用函數外的參數,一般也可稱為匿名函數,但兩者有所不同。
閉包的價值在於可以作為函數對象或者匿名函數,對於類型系統而言這就意味著不僅要表示數據還要表示代碼。支持閉包的多數語言都將函數作為第一級對象,就是說這些函數可以存儲到變量中、作為參數傳遞給其他函數,最重要的是能夠被函數動態地創建和返回.
匿名函數減少了變量名稱的沖突,為沒有權限作用域的JS提供了權限作用域。當我們需要提供一個接口,但又不想讓這個接口對象為全局變量就需要用匿名函數:
(function(){
局部代碼,外部永遠無法訪問,除非你提供一個入口
})();
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved