第一章
- JavaScript起源于Netscape于微軟的瀏覽器大戰時期,由Netscape與Sun公司合作開發
- DOM是一套對文檔內容進行抽象和概念化的方法。
- 一開始,各家瀏覽器廠商都有各自的一套DOM標準,后來由W3C結合各家優點推出一套新的DOM標準,目前基本所有瀏覽器都對這套DOM標準有這很好的支持。
第二章
數據類型
Js是一種弱類型語言,弱類型語言是指聲明變量的時候不需要指定變量的類型,強類型語言需要指定,比如C/C++就是強類型的。
聲明變量使用
var
關鍵字。JS不用提前聲明變量,賦值語句會自動聲明變量,但是不推薦這么做,最好提前聲明。
在字符串中用反斜線\來轉義。
主要有五種簡單數據類型
String
,Number
,Boolean
,Undefined
,Null
和一種復雜數據類型Object
。-
各個數據類型的存儲形式。
各個數據類型的存儲形式 原始類型(primitive type):存儲在棧(stack)中的簡單數據段,也就是說,它們的值直接存儲在變量訪問的位置。如數字(Number)、字符串(String)、布爾(Boolen)、Null、Undefined。
引用類型(reference type):存儲在堆(heap)中的對象,也就是說,存儲在變量處的值是一個指針(point),指向存儲對象的內存處。引用類型就是對象,比如 Object,Number、String,Boolen,Date、Array 等等。
數組
數組是一個變量表示一個值的集合,其中每個值都是這個數組的一個元素。
-
聲明數組的方法:
var arr = Array(3); var arr = Array();//不指明數組大小 var arr = Array("one", "two", "three");//聲明的同時賦值
-
關聯數組:
var lennon = Array(); lennon["name"] = "John"; lennon["year"] = 1940;
對象
對象也是用一個值表示一組值,對象的每個值都是它的一個屬性。
JavaScript中的變量都是某種類型的對象。
-
對象使用點號獲取屬性和函數:
Object.propertyName; Object.functionName();
實例是對象的具體個體。
-
使用new關鍵字為對象創建新實例:
var jeremy = new Person();
內建對象: JavaScript中預先定義好的對象,比如
Array
,Date
,Math
宿主對象:由運行環境事先定義好的對象,在web應用里,運行環境就是指瀏覽器。包括
Form
,Image
,Element
,document
等。
操作
-
使用加號拼接字符串或變量:
var message = "hello " + "world" //hello world; var who = "world"; var message = "hello " + who;
-
數值和字符串拼接,結果會是一個更長的字符串:
var value = "10" + 20; //結果為"1020"
比較操作符號
- 執行相等操作的時候,建議使用"==="代替"==",會執行嚴格比較,會同時比較值和類型。
- 不等操作符"!="用"!=="代替,原因同上。
函數
- 變量作用域
- 全局變量:一旦聲明可以在腳步的任何位置訪問。
- 局部變量:只能在聲明它的那個函數內部訪問(需要用
var
關鍵字在函數內部聲明)。
第三章 DOM
DOM
DOM 中的 D: document,具體到前端就是我們編寫的網頁文檔
DOM 中的 O: object,就是第二章中提到的對象,有用戶定義對象,內建對象,宿主對象
window 對象: 對應著瀏覽器窗口本身,這個對象的屬性和方法統稱 BOM (瀏覽器對象模型)
-
DOM中的M: Model-模型,代表某種事物的表現形式,DOM 把文檔表示為一顆樹的形式(數學意義上的樹,類似家譜樹),這里稱為“節點樹”:
文檔樹
節點
節點:網絡術語,表示網絡中的一個連接點,在 DOM 中表示文檔樹上的樹枝和樹葉。
元素節點:指文檔中的各種元素,如
<body>
,<p>
等,<html>
為根元素。文本節點:各種元素包圍著的文本內容,比如
<p>Hello world</p>
中的這個“Hello world”。-
屬性節點:對元素進行描述的屬性,比如大部分元素都有的
title
屬性。三種節點 -
獲取元素,有三種方法
-
getElementById
,根據給定的 ID 返回特定的元素節對象點,是 document 對象特有的函數document.getElementById("id");
-
getElementByTagName
,根據給定的標簽名返回對象數組,每個對象對應文檔里面有此標簽的一個元素,可以使用通配符“*”來返回文檔里的所有元素。document.getElementByTagName("h1")
-
getElementByClassName
,HTML5 加入,跟getElementByTagName
類似,返回一個對象數組,可以一次給定多個class name,以空格分隔,順序無關。document.getElementByClassName("class1 class2");
-
-
對于不支持
getElementByClassName
的較老的瀏覽器,可以自己實現一個:function getElementByClassName(node, classname) { if (node.getElementsByClassName) { //使用現有方法 return node.getElementsByClassName(classname) } else { var results = new Array(); var elems = node.getElementsByTagName("*"); for (var i = 0; i < elems.lenth; i++) { if (elems[i].className.indexOf(classname) != -1) { results[results.length] = elems[1i]; } } return results; } }
獲取和設置屬性
-
getAttribute
函數用于獲取屬性- 只有一個參數--打算查詢的屬性名字;
- 只能通過元素節點對象調用;
- 如果沒查詢到對應屬性,返回
null
。
object.getAttribute(attribute);
-
setAttribute函數用于設置屬性,也只能通過元素節點對象調用:
object.setAttribute(attribute, value);
事件處理函數
在特定事件發生時調用特定的 JavaScript 代碼。
-
有很多種事件處理函數,比如
onmouseover
,onmouseout
,onclick
等。event = "JavaScript statement(s)";
-
JavaScript代碼包含在一對引號直接,這對引號之間可以放置多個 JavaScript 語句,用“;”隔開就行:
onclick = "showPic(this)";//this表示當前對象
-
在事件處理函數被觸發之后,引號之間的 JavaScript 語句被執行,被調用的語句可以給這個事件處理函數返回一個值。返回
true
代表這個事件被觸發了,false
代表沒有觸發,利用這點,可以攔截一些默認事件,比如下面這個鏈接,點擊之后由于返回的是false
,瀏覽器認為這個事件沒有被觸發,所以不會發生跳轉。<a herf="http://www.example.com" onclik="return false;">Click me</a>
一些常用屬性
-
childNodes
屬性:用于獲取任何一個元素的所有子元素,是一個包含這個元素所有子元素的數組(子元素除了元素節點還包括很多其他節點)。 -
nodeType
屬性:獲取一個節點的節點類型,節點類型是通過數字表示:- 1代表元素節點;
- 2代表屬性節點;
- 3代表文本節點。
-
nodeValue
屬性:用于獲得一個節點的值,一般元素節點的值是null,文本節點的值是它里面的文本內容。 -
firstChild
屬性:獲得一個節點的第一個子節點,等同于childNodes[0]
。 -
lastChild
屬性:獲得一個節點的最后一個子節點,等同于node.childNodes[node.childNodes.length-1]
。