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;
} app
這也行,但爲何還要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(){
局部代碼,外部永遠沒法訪問,除非你提供一個入口
})(); 函數