JavaScript知識總結--歷史-html引用方式-基礎概念

1、JavaScript簡介算法

一、ECMAScript編程

  1995~今已經20年的歷史,產生JavaScript是須要它去解決必定的問題:在瀏覽器端作一些數據的驗證,試想當年的網絡環境,若是可以在瀏覽器端作數據驗證可以方便不少。現在的JavaScript擁有了閉包、匿名函數、甚至元編程的能力。一門可以解決棘手問題的新語言的誕生一定有很廣闊的市場,有市場就會有競爭,競爭逐漸演化爲標準也就是ECMAScript、它定義了一門腳本語言的標準,在此基礎上加入DOM,BOM的支持構成了現在的JavaScript。數組

二、  DOM(Document Object Model)瀏覽器

DOM是一個編程接口,操做的對象是基於XML的HTML(HTML元素的容器)結構。安全

DOM將一個HTML文件表示成一個分層樹形圖,藉助DOM提供的API,開發人員能夠很方便的增、刪、改、查HTML文件節點網絡

DOM由兩部分構成:DOM Core和DOM HTML 前者用於描述HTML結構,後者用於提供一些操做,是否是很符合數據結構+算法的思想。數據結構

三、  BOM(Browser Object Model)閉包

BOM是一個描述瀏覽器窗口的對象模型。好比窗口大小,分辨率,location,這些都是屬於瀏覽器窗口的信息,跟DOM沒有關係,同時也提供了和瀏覽器交互的方法和接口。函數

2、在HTML中使用JavaScript測試

在HTML代碼中使用<script></script>標籤將JavaScript代碼嵌入HTML文件中,包含在這個標籤裏的JavaScript代碼從上到下依次解釋。

能夠經過這個標籤的src屬性連接外部的JavaScript文件,也能夠在這個標籤中間直接寫JavaScript代碼。不可以在一個script標籤中即便用src屬性連接外部文件又使用內嵌的方式寫入JavaScript代碼,若是這樣寫內嵌的代碼將被忽略。

3、基本概念

一、  嚴格模式:爲JavaScript定義了一種不一樣的解析和執行模型,在嚴格模式下ECMAScript3中一些不肯定的行爲將獲得處理,並且某些不安全的操做也會跑出錯誤。要在腳本中啓用嚴格模式,能夠在頂部添加以下代碼

「use strict」;

二、  變量

每一個變量僅僅是一個用於保存值的佔位符而已 :var xxxx;//(xxxx是變量名),

注意:

①、此處僅僅是定義了變量xxxx單未給變量初始化,此時xxxx會保存一個特殊的值:undefined

②、使用var操做符定義的變量將成爲定義該變量做用域中的局部變量,這是相對於全局變量來說的,若是不適用var而直接給一個未聲明過的變量賦值,那麼當這個變量定義語句執行事後這個變量將成爲全局變量。未經聲明的變量賦值在嚴格模式下會致使拋出ReferenceError錯誤。

三、  數據類型

①     ECMAScript定義了5中簡單的數據類型(基本數據類型)

a)         Undefined

很是神奇的一種數據類型,其餘語言中沒見過,這種類型只有一個值即:undefined。如上所述在使用var聲明變量但未對其加以初始化時,這個變量的值就是undefined。

b)         Null

這也是一個很是神奇的類型,只有一個值null,標識一個空對象的指針。通常若是定義的變量是要用來保存對象的,那麼最好在初始化的時候將它初始化爲null值,這樣一來在之後用到該變量的時候只須要直接檢查該變量是否爲null值就能夠知道相應的變量是否已經保存了一個對象的引用。

Var car=null;

Alert(Type of car) //Object;

……;

If(car != null){

//對car對象執行某些操做

}

又一枚神奇的定義:undefined派生自null

Alert(null == undefined); //true

c)         Boolean

只有兩個值true、false;

全部類型的值都有與這兩個值等價的值,可使用Boolean(變量名)來轉換。

d)         Number

NaN值,Not a Number

任何數除0都會返回NaN,NaN與任何值都不相等包括NaN自己

e)         String

②     1中複雜的數據類型

Object,本質上是由一組無序的名值對組成

建立自定義對象的方式是建立Object類型的實例併爲其添加屬性和方法。基本類型不具備這個特性。

Var person = new Object();//定義一個person對象

Person.name=’helloworl~~~’;//爲person對象添加一個name屬性

Alert(person.name);// helloworl~~~

       不支持任何建立自定義類型的機制,全部值最終都將是上述6種數據類型之一。     經過typeof操做符能夠識別變量的類型,函數在ECMAScript中是對象,不是一種數據類型,然而函數有一些特殊的屬性,所以經過typeof操做符來區分函數和其餘對象是有必要的。

四、  函數

①   、無須制定函數的返回值,由於任何ECMAScript函數均可以在任什麼時候候返回任何值。

②   實際上、未指定返回值的函數返回的是一個特殊的undefined值。

③   ECMAScript中也沒有函數簽名的概念,由於其函數參數是以一個包含零活多個值得數組的形式傳遞的。

④   能夠向ECMAScript函數傳遞任意數量的參數,而且能夠經過arguments對象來訪問這些參數。

⑤   因爲不存在函數簽名的特性,ECMAScript函數不能重載。

五、  變量的類型檢測

①   、Typeof 操做符,注意這是一個一元操做符,它用來檢測變量的類型

Var a=true;

Var b;

Var c=null;

Var d = new Object();

Alert(typeof a);// 輸出:boolean

Alert(typeof b);// 輸出:undefined

Alert(typeof c);// 輸出:object

Alert(typeof d);// 輸出:object

 

②   Instanceof 操做符,是一個二元操做符,測試一個對象是否是另外一個對象的實例,返回ture false。

Alert(person instanceof Object);//變量person是Object嗎?

Alert(colors instanceof Array);//變量colors是Array嗎?

Alert(pattern instanceof RegExp);//變量pattern是RegExp嗎?

在檢測基本數據類型時typeof很好用,可是在檢測引用類型的變量時,這個操做符的用處不大,由於它只會返回object或function。一般咱們並不想知道某個值時對象,而是想知道它是什麼類型的對象,這個時候用instanceof操做符就能夠實現此目的。

六、  做用域

JavaScript中沒有塊級做用域,於是支持根據條件來定義變量。在其餘類C的語言中,由花括號封閉的代碼都有本身的做用域。

If(true){

         Var color=’blue’;

}

Alert(color); //’blue’

七、  垃圾收集

JavaScript具備自動垃圾收集機制,也就是說,執行環境會負責管理代碼執行過程當中使用的內存。垃圾收集機制的原理簡單的講就是找出那些不在繼續使用的變量,而後釋放其所佔用的內存。通常都是週期性的執行這一操做,固然也能夠主動調用。

找程序中的無用變量的策略可能會由於實現而異,一般有以下兩個策略:

①、    標記清除:當變量進入環境時,就將這個變量標記爲「進入環境」。從邏輯上將,永遠不能釋放進入環境的變量所佔用的內存,由於只要執行流進入相應的環境,就可能用到他們。而當變量離開環境時,則將其標記爲「離開環境」。垃圾收集器完成清除離開環境的對象內存的工做。

②、    引用計數(不太常見):跟蹤每一個值被引用的次數,當聲明瞭一個變量並將一個引用類型的值賦給該變量時,則這個值得引用次數就是1,若是同一個值又被賦給另外一個變量,則該值得引用次數加1.相反,若是包含對這個值引用的變量又取得另一個值,則這個值得引用次數減1,當這個值得引用次數變成0時,則說明沒有辦法再訪問這個值了,於是就能夠將其佔用的內存空間回收回來。

優化內存佔用的最佳方式,就是爲執行中的代碼只保存必要的數據,一旦數據不在有用,最好經過將其值設置爲null來釋放其引用。這個作法叫作解除引用。這一作法使用於大多數全局變量和全局對象的屬性。局部變量會在他們離開執行環境時自動被解除引用。注意:解除一個值得引用並不意味着自動回收該值所佔用的內存。解除引用的真正做用是讓值脫離執行環境,以便垃圾收集器下次運行時將其回收。

 

本文系我的讀書總結,轉載請註明出處

相關文章
相關標籤/搜索