JavaScript概覽

近日的項目需要用JavaScript完成,於是決定通讀《JavaScript高級程序設計第三版》,書是2012年的,比較老了,但是可以用來快速瞭解JavaScript大概,主要目的是爲讀開源的JS項目掃清一些障礙。

JavaScript組成

完整的JavaScript由ECMAScript、DOM和BOM三部分組成。
- ECMAScript,提供核心語言功能。
- DOM,文檔對象模型,提供訪問和操作網頁內容的方法和接口。
- BOM,瀏覽器對象模型,提供與瀏覽器交互的方法和接口。

HTML中使用JavaScript

在HTML中插入JavaScript需要使用

<script>
     function sayScript() {
            //注意轉義
            alert("<\/script>"); 
     }
</script>

HTML中包含外部JavaScript文件,推薦使用

<script src='example.js'></script>
<script src="http://www.somewhere.com/afile.js"></script>

基本概念

  • 大小寫敏感。
  • 標識符:第一個字符必須是字母、下劃線或美元符號。推薦駝峯命名法。
  • 註釋:單行註釋(//)和塊級註釋(/**/)。
  • 嚴格模式:一種會對不安全操作拋出錯誤的模式。使用方法:

    function doSomething() {
    "use strict";
    //函數體
    }
  • 變量:鬆散型變量,即可以用來保存任何類型的數據。定義方式var message;用var操作符定義的變量將成爲定義該變量作用域中的局部變量。也就是說,如果在函數中使用var定義一個變量,那麼這個變量在函數退出後就會被銷燬。不用var定義的變量是全局變量,但是儘量不要在局部作用域中定義全局變量,因爲難以維護。
  • 數據類型:簡單數據類型有5種,Undefined, Null, Boolean, Number和String。
  • Object類型:Object實例都具有以下屬性和方法。(1)constructor(2)hasOwnProperty(propertyName):用於檢查給定屬性在當前對象實例中是否存在(3)isPrototypeOf(object):用於檢查傳入的對象是否是傳入對象的原型(4)propertyIsEnumerable(propertyName):用於檢查給定的屬性是否能夠用for-in語句(5)toLocalString():返回對象的字符串表示,該字符串與執行環境的地區對應。(6)toString():返回對象的字符串表示。(7)valueOf():返回對象的字符串、數值或布爾值表示。通常與toString()的返回值相同。
  • 相等操作符。JavaScript中有相等(==)和不相等(!=)、全等(===)和不全等(!==)兩類相等操作符。全等只在兩個操作數未經轉換就相等的情況下返回true,不全等只在兩個操作數未經轉換就不相等的情況下返回true。例如

    var result1 = ("55" == 55); //true,因爲轉換後相等
    var result2 = ("55" === 55);//false
    var result3 = ("55" != 55); //false,因爲轉換後相等
    var result4 = ("55" !== 55); //true
  • with語句,這個比較好玩,可以將代碼的作用域設置到一個特定對象中。

    var qs = location.search.substring(1);
    var hostName = location.hostname;
    var url = location.href;
    // 用with語句
    with(location) {
    var qs = search.substring(1);
    var hostName = hostname;
    var url = href;
    }
  • 函數。用function聲明。特別之處在於它接收的參數始終都是個數組,而不關心數組中包含哪寫參數,在函數體內可以通過arguments對象來訪問參數數組,例如

    function sayHi() {
    alert("Hello " + arguments[0] +"," + arguments[1]);
    }

    調用sayHi函數的時候可以傳任意個參數。爲了保證程序可讀性和可維護性,還是推薦用和其他語言一樣的方式聲明函數,在不確定參數個數時用這種方式很方便。
  • 沒有重載。因爲上面的特性,所以導致JavaScript沒有重載的說法,如果兩個函數名稱一樣,上面的會被下面的覆蓋。

BOM

BOM提供了很多對象,用於訪問瀏覽器的功能,這些功能與任何網頁內容無關。

window對象

BOM的核心對象,表示瀏覽器的一個實例。
- 全局作用域中聲明的變量、函數都會成爲window對象的屬性和方法。

var age = 29;
function sayAge() {
alert(this.age);
}
alert(window.age); //29
sayAge(); //29
window.sayAge(); //29

- 如果頁面中包含frame,則每個frame都有自己的window對象,並且保存在frames集合中。訪問最外層的frame,可以用window.frames[0],推薦用top.frames[0]。top對象始終指向最外層框架。這個frame就是瀏覽器劃分的區域,比如rightFrame,leftFrame。
- 窗口位置、窗口大小、導航和打開窗口都是window對象的屬性,具體用到具體查。
- 間歇調用(setInterval())和超時調用(setTimeout())是window對象的方法,感覺比較好玩,JavaScript是單線程語言,但它允許通過設置超時值和間歇值來調度代碼在特定時刻執行。間歇調用是每隔指定的時間就執行一次代碼,超時調用是指定的時間過後執行代碼。有概念就好,具體用時再查。
“`
setInterval(function () {
alert(“Hello world”);
}, 1000);

//雖然可以寫成 setInterval(“Hello world”, 1000);但是由於字符串容易出問題,所以推薦寫成function
“`

location對象

提供了與當前窗口中加載的文檔有關的信息,還提供了一些導航功能。它既是window對象的屬性,也是document對象的屬性,即window.location和docuent.location引用的是同一個對象。屬性有hash、host、hostname、href、pahtname、port、protocol、search。

screen和history對象

screen對象保存着與客戶端顯示器有關的信息,一般只用於站點分析。history用於訪問瀏覽器的歷史記錄。

DOM

DOM可以將任何HTML或XML文檔描繪成一個由多層節點構成的樹。

<html>
    <head>
        <title>Sample Page</title>
    </head>
    <body>
         <p>Hello World!</p>
    </body>
</html>

DOM
- Node類型。JavaScript中所有節點類型都繼承自Node類型。
- Document類型。JavaScript通過Document類型表示文檔。在瀏覽器中,document對象是HTMLDocument(繼承自Document類型)的一個實例,表示整個HTML頁面。

<html>
<body>
</body>
</html>

經過瀏覽器解析後,文檔中只包含一個子節點,元素。可以通過documentElemtn或者childNodes列表來訪問這個元素。

var html = document.documentElement;//取得對html的引用
alert(html === document.childNodes[0]); // true
alert(html === document.firstChild); //true

發佈了97 篇原創文章 · 獲贊 41 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章