JavaScript 基础知识

對象化編程
  JavaScript 是使用“對象化編程”的,或者叫“面向對象編程”的。所謂“對象化編程”,意思是把 JavaScript 能涉及的範圍劃分成大大小小的對象,對象下面還繼續劃分對象直至非常詳細為止,所有的編程都以對象為出發點,基於對象。小到一個變量,大到網頁文檔、窗口甚至屏幕,都是對象。這一章將“面向對象”講述 JavaScript 的運行情況。

對象的基本知識
 對象是可以從 JavaScript“勢力範圍”中劃分出來的一小塊,可以是一段文字、一幅圖片、一個表單(Form)等等。每個對象有它自己的屬性、方法和事件。對象的屬性是反映該對象某些特定的性質的,例如:字符串的長度、圖像的長寬、文字框(Textbox)裏的文字等等;對象的方法能對該對象做一些事情,例如,表單的“提交”(Submit),窗口的“滾動”(Scrolling)等等;而對象的事件就能響應發生在對象上的事情,例如提交表單產生表單的“提交事件”,點擊連接產生的“點擊事件”。不是所有的對象都有以上三個性質,有些沒有事件,有些只有屬性。引用對象的任一“性質”用“<對象名>.<性質名>”這種方法。

基本對象
現在我們要複習以上學過的內容了——把一些數據類型用對象的角度重新學習一下。
Number “數字”對象。這個對象用得很少,作者就一次也沒有見過。不過屬於“Number”的對象,也就是“變量”就多了。
屬性
MAX_VALUE 用法:Number.MAX_VALUE;返回“最大值”。
MIN_VALUE 用法:Number.MIN_VALUE;返回“最小值”。
NaN 用法:Number.NaN 或 NaN;返回“NaN”。“NaN”(不是數值)在很早就介紹過了。
NEGATIVE_INFINITY 用法:Number.NEGATIVE_INFINITY;返回:負無窮大,比“最小值”還小的值。
POSITIVE_INFINITY 用法:Number.POSITIVE_INFINITY;返回:正無窮大,比“最大值”還大的值。
方法
toString() 用法:<數值變量>.toString();返回:字符串形式的數值。如:若 a == 123;則 a.toString() == '123'。
String 字符串對象。聲明一個字符串對象最簡單、快捷、有效、常用的方法就是直接賦值。
屬性
length 用法:<字符串對象>.length;返回該字符串的長度。
方法
charAt() 用法:<字符串對象>.charAt(<位置>);返回該字符串位於第<位置>位的單個字符。注意:字符串中的一個字符是第 0 位的,第二個才是第 1 位的,最後一個字符是第 length - 1 位的。
charCodeAt() 用法:<字符串對象>.charCodeAt(<位置>);返回該字符串位於第<位置>位的單個字符的 ASCII 碼。
fromCharCode() 用法:String.fromCharCode(a, b, c...);返回一個字符串,該字符串每個字符的 ASCII 碼由 a, b, c... 等來確定。
indexOf() 用法:<字符串對象>.indexOf(<另一個字符串對象>[, <起始位置>]);該方法從<字符串對象>中查找<另一個字符串對象>(如果給出<起始位置>就忽略之前的位置),如果找到了,就返回它的位置,沒有找到就返回“-1”。所有的“位置”都是從零開始的。
lastIndexOf() 用法:<字符串對象>.lastIndexOf(<另一個字符串對象>[, <起始位置>]);跟 indexOf() 相似,不過是從後邊開始找。
split() 用法:<字符串對象>.split(<分隔符字符>);返回一個數組,該數組是從<字符串對象>中分離開來的,<分隔符字符>決定了分離的地方,它本身不會包含在所返回的數組中。例如:'1&2&345&678'.split('&')返回數組:1,2,345,678。關於數組,我們等一下就討論。
substring() 用法:<字符串對象>.substring(<始>[, <終>]);返回原字符串的子字符串,該字符串是原字符串從<始>位置到<終>位置的前一位置的一段。<終> - <始> = 返回字符串的長度(length)。如果沒有指定<終>或指定得超過字符串長度,則子字符串從<始>位置一直取到原字符串尾。如果所指定的位置不能返回字符串,則返回空字符串。
substr() 用法:<字符串對象>.substr(<始>[, <長>]);返回原字符串的子字符串,該字符串是原字符串從<始>位置開始,長度為<長>的一段。如果沒有指定<長>或指定得超過字符串長度,則子字符串從<始>位置一直取到原字符串尾。如果所指定的位置不能返回字符串,則返回空字符串。
toLowerCase() 用法:<字符串對象>.toLowerCase();返回把原字符串所有大寫字母都變成小寫的字符串。
toUpperCase() 用法:<字符串對象>.toUpperCase();返回把原字符串所有小寫字母都變成大寫的字符串。
Array 數組對象。數組對象是一個對象的集合,裏邊的對象可以是不同類型的。數組的每一個成員對象都有一個“下標”,用來表示它在數組中的位置(既然是“位置”,就也是從零開始的啦)。
數組的定義方法:
var <數組名> = new Array();
這樣就定義了一個空數組。以後要添加數組元素,就用:
<數組名>[<下標>] = ...;
注意這裏的方括號不是“可以省略”的意思,數組的下標表示方法就是用方括號括起來。
如果想在定義數組的時候直接初始化數據,請用:
var <數組名> = new Array(<元素1>, <元素2>, <元素3>...);
例如,var myArray = new Array(1, 4.5, 'Hi'); 定義了一個數組 myArray,裏邊的元素是:myArray[0] == 1; myArray[1] == 4.5; myArray[2] == 'Hi'。
但是,如果元素列表中只有一個元素,而這個元素又是一個正整數的話,這將定義一個包含<正整數>個空元素的數組。
注意:JavaScript只有一維數組!千萬不要用“Array(3,4)”這種愚蠢的方法來定義 4 x 5 的二維數組,或者用“myArray[2,3]”這種方法來返回“二維數組”中的元素。任意“myArray[...,3]”這種形式的調用其實只返回了“myArray[3]”。要使用多維數組,請用這種虛擬法:
var myArray = new Array(new Array(), new Array(), new Array(), ...);
其實這是一個一維數組,裏邊的每一個元素又是一個數組。調用這個“二維數組”的元素時:myArray[2][3] = ...;
屬性
length 用法:<數組對象>.length;返回:數組的長度,即數組裏有多少個元素。它等於數組裏最後一個元素的下標加一。所以,想添加一個元素,只需要:myArray[myArray.length] = ...。
方法
join() 用法:<數組對象>.join(<分隔符>);返回一個字符串,該字符串把數組中的各個元素串起來,用<分隔符>置於元素與元素之間。這個方法不影響數組原本的內容。
reverse() 用法:<數組對象>.reverse();使數組中的元素順序反過來。如果對數組[1, 2, 3]使用這個方法,它將使數組變成:[3, 2, 1]。
slice() 用法:<數組對象>.slice(<始>[, <終>]);返回一個數組,該數組是原數組的子集,始於<始>,終於<終>。如果不給出<終>,則子集一直取到原數組的結尾。
sort() 用法:<數組對象>.sort([<方法函數>]);使數組中的元素按照一定的順序排列。如果不指定<方法函數>,則按字母順序排列。在這種情況下,80 是比 9 排得前的。如果指定<方法函數>,則按<方法函數>所指定的排序方法排序。<方法函數>比較難講述,這裏只將一些有用的<方法函數>介紹給大家。
按升序排列數字:
function sortMethod(a, b) {
    return a - b;
}


myArray.sort(sortMethod);
按降序排列數字:把上面的“a - b”該成“b - a”。
有關函數,請看下面。
Math “數學”對象,提供對數據的數學計算。下面所提到的屬性和方法,不再詳細說明“用法”,大家在使用的時候記住用“Math.<名>”這種格式。
屬性
E 返回常數 e (2.718281828...)。
LN2 返回 2 的自然對數 (ln 2)。
LN10 返回 10 的自然對數 (ln 10)。
LOG2E 返回以 2 為低的 e 的對數 (log2e)。
LOG10E 返回以 10 為低的 e 的對數 (log10e)。
PI 返回π(3.1415926535...)。
SQRT1_2 返回 1/2 的平方根。
SQRT2 返回 2 的平方根。
方法
abs(x) 返回 x 的絕對值。
acos(x) 返回 x 的反餘弦值(餘弦值等於 x 的角度),用弧度表示。
asin(x) 返回 x 的反正弦值。
atan(x) 返回 x 的反正切值。
atan2(x, y) 返回複平面內點(x, y)對應的複數的幅角,用弧度表示,其值在 -π 到 π 之間。
ceil(x) 返回大於等於 x 的最小整數。
cos(x) 返回 x 的餘弦。
exp(x) 返回 e 的 x 次冪 (ex)。
floor(x) 返回小於等於 x 的最大整數。
log(x) 返回 x 的自然對數 (ln x)。
max(a, b) 返回 a, b 中較大的數。
min(a, b) 返回 a, b 中較小的數。
pow(n, m) 返回 n 的 m 次冪 (nm)。
random() 返回大於 0 小於 1 的一個隨機數。
round(x) 返回 x 四舍五入後的值。
sin(x) 返回 x 的正弦。
sqrt(x) 返回 x 的平方根。
tan(x) 返回 x 的正切。
Date 日期對象。這個對象可以儲存任意一個日期,從 0001 年到 9999 年,並且可以精確到毫秒數(1/1000 秒)。在內部,日期對象是一個整數,它是從 1970 年 1 月 1 日零時正開始計算到日期對象所指的日期的毫秒數。如果所指日期比 1970 年早,則它是一個負數。所有日期時間,如果不指定時區,都采用“UTC”(世界時)時區,它與“GMT”(格林威治時間)在數值上是一樣的。
定義一個日期對象:
var d = new Date;
這個方法使 d 成為日期對象,並且已有初始值:當前時間。如果要自定初始值,可以用:
var d = new Date(99, 10, 1);     //99 年 10 月 1 日
var d = new Date('Oct 1, 1999'); //99 年 10 月 1 日
等等方法。最好的方法就是用下面介紹的“方法”來嚴格的定義時間。
方法
以下有很多“g/set[UTC]XXX”這樣的方法,它表示既有“getXXX”方法,又有“setXXX”方法。“get”是獲得某個數值,而“set”是設定某個數值。如果帶有“UTC”字母,則表示獲得/設定的數值是基於 UTC 時間的,沒有則表示基於本地時間或瀏覽期默認時間的。
如無說明,方法的使用格式為:“<對象>.<方法>”,下同。
g/set[UTC]FullYear() 返回/設置年份,用四位數表示。如果使用“x.set[UTC]FullYear(99)”,則年份被設定為 0099 年。
g/set[UTC]Year() 返回/設置年份,用兩位數表示。設定的時候瀏覽器自動加上“19”開頭,故使用“x.set[UTC]Year(00)”把年份設定為 1900 年。
g/set[UTC]Month() 返回/設置月份。
g/set[UTC]Date() 返回/設置日期。
g/set[UTC]Day() 返回/設置星期,0 表示星期天。
g/set[UTC]Hours() 返回/設置小時數,24小時制。
g/set[UTC]Minutes() 返回/設置分鐘數。
g/set[UTC]Seconds() 返回/設置秒鐘數。
g/set[UTC]Milliseconds() 返回/設置毫秒數。
g/setTime() 返回/設置時間,該時間就是日期對象的內部處理方法:從 1970 年 1 月 1 日零時正開始計算到日期對象所指的日期的毫秒數。如果要使某日期對象所指的時間推遲 1 小時,就用:“x.setTime(x.getTime() + 60 * 60 * 1000);”(一小時 60 分,一分 60 秒,一秒 1000 毫秒)。
getTimezoneOffset() 返回日期對象采用的時區與格林威治時間所差的分鐘數。在格林威治東方的市區,該值為負,例如:中國時區(GMT+0800)返回“-480”。
toString() 返回一個字符串,描述日期對象所指的日期。這個字符串的格式類似於:“Fri Jul 21 15:43:46 UTC+0800 2000”。
toLocaleString() 返回一個字符串,描述日期對象所指的日期,用本地時間表示格式。如:“2000-07-21 15:43:46”。
toGMTString() 返回一個字符串,描述日期對象所指的日期,用 GMT 格式。
toUTCString() 返回一個字符串,描述日期對象所指的日期,用 UTC 格式。
parse() 用法:Date.parse(<日期對象>);返回該日期對象的內部表達方式。

全局對象
全局對象從不現形,它可以說是虛擬出來的,目的在於把全局函數“對象化”。在 Microsoft JScript 語言參考中,它叫做“Global 對象”,但是引用它的方法和屬性從來不用“Global.xxx”(況且這樣做會出錯),而直接用“xxx”。
屬性
NaN 一早就說過了。
方法
eval() 把括號內的字符串當作標准語句或表達式來運行。
isFinite() 如果括號內的數字是“有限”的(介於 Number.MIN_VALUE 和 Number.MAX_VALUE 之間)就返回 true;否則返回 false。
isNaN() 如果括號內的值是“NaN”則返回 true 否則返回 false。
parseInt() 返回把括號內的內容轉換成整數之後的值。如果括號內是字符串,則字符串開頭的數字部分被轉換成整數,如果以字母開頭,則返回“NaN”。
parseFloat() 返回把括號內的字符串轉換成浮點數之後的值,字符串開頭的數字部分被轉換成浮點數,如果以字母開頭,則返回“NaN”。
toString() 用法:<對象>.toString();把對象轉換成字符串。如果在括號中指定一個數值,則轉換過程中所有數值轉換成特定進制。
escape() 返回括號中的字符串經過編碼後的新字符串。該編碼應用於 URL,也就是把空格寫成“%20”這種格式。“+”不被編碼,如果要“+”也被編碼,請用:escape('...', 1)。
unescape() 是 escape() 的反過程。解編括號中字符串成為一般字符串。

函數
函數的定義 
所謂“函數”,是有返回值的對象或對象的方法。 
函數的種類 
常見的函數有:構造函數,如 Array(),能構造一個數組;全局函數,即全局對象裏的方法;自定義函數;等等。 
自定義函數 
定義函數用以下語句: 
function 函數名([參數集]) {
    ...
    [return[ <值>];]
    ...

其中,用在 function 之後和函數結尾的大括號是不能省去的,就算整個函數只有一句。 
函數名與變量名有一樣的起名規定,也就是只包含字母數字下劃線、字母排頭、不能與保留字重複等。 
參數集可有可無,但括號就一定要有。 
參數 是函數外部向函數內部傳遞信息的橋梁,例如,想叫一個函數返回 3 的立方,你就要讓函數知道“3”這個數值,這時候就要有一個變量來接收數值,這種變量叫做參數。 
參數集是一個或多個用逗號分隔開來的參數的集合,如:a, b, c。 
函數的內部有一至多行語句,這些語句並不會立即執行,而只當有其它程序調用它時才執行。這些語句中可能包含“return”語句。在執行一個函數的時候,碰到 return 語句,函數立刻停止執行,並返回到調用它的程序中。如果“return”後帶有<值>,則退出函數的同時返回該值。 
在函數的內部,參數可以直接當作變量來使用,並可以用 var 語句來新建一些變量,但是這些變量都不能被函數外部的過程調用。要使函數內部的信息能被外部調用,要麼使用“return”返回值,要麼使用全局變量。 
全局變量 在 Script 的“根部”(非函數內部)的“var”語句所定義的變量就是全局變量,它能在整個過程的任意地方被調用、更改。 
例 
function addAll(a, b, c) {
    return a + b + c;
}


var total = addAll(3, 4, 5); 
這個例子建立了一個叫“addAll”的函數,它有 3 個參數:a, b, c,作用是返回三個數相加的結果。在函數外部,利用“var total = addAll(3, 4, 5);”接收函數的返回值。 
更多的時候,函數是沒有返回值的,這種函數在一些比較強調嚴格的語言中是叫做“過程”的,例如 Basic 類語言的“Sub”、Pascal 語言的“procedure”。 
屬性 
arguments 一個數組,反映外部程序調用函數時指定的參數。用法:直接在函數內部調用“arguments”。 文檔對象
現在我們將開始討論更“實際”的話題——文檔對象(DOM)。文檔對象是指在網頁文檔裏劃分出來的對象。在 JavaScript 能夠涉及的範圍內有如下幾個“大”對象:window, document, location, navigator, screen, history 等。下面是一個文檔對象樹,你可以看到對象下包含對象的“壯觀”情景。要引用某個對象,就要把父級的對象都列出來。例如,要引用某表單“applicationForm”的某文字框“customerName”,就要用“document.applicationForm.customerName”。
下表中有些對象是全小寫的,有些是以大寫字母開頭的。以大寫字母開頭的對象表示,引用該對象不使用下表列出的名字,而直接用對象的“名字”(Id 或 Name,下面有講解),或用它所屬的對象數組指定。
這裏我們不准備講解對象的“事件”,雖然我們也會列出對象所能響應的事件。我們將會在下一章“事件處理”中講解事件。
navigator 
screen 
window 
history 
location 
frames[]; Frame 
document 
anchors[]; links[]; Link 
applets[] 
embeds[] 
forms[]; Form 
Button 
Checkbox 
elements[]; Element 
Hidden 
Password 
Radio 
Reset 
Select 
options[]; Option 
Submit 
Text 
Textarea 
images[]; Image 
瀏覽器對象
屏幕對象
窗口對象
 曆史對象
 地址對象
 框架對象
 文檔對象
  連接對象
  Java小程序對象
  插件對象
  表單對象
   按鈕對象
   複選框對象
   表單元素對象
   隱藏對象
   密碼輸入區對象
   單選域對象
   重置按鈕對象
   選擇區(下拉菜單、列表)對象
    選擇項對象
   提交按鈕對象
   文本框對象
   多行文本輸入區對象
  圖片對象 navigator 瀏覽器對象 反映了當前使用的瀏覽器的資料。
屬性
appCodeName 返回瀏覽器的“碼名”(?),流行的 IE 和 NN 都返回 'Mozilla'。
appName 返回瀏覽器名。IE 返回 'Microsoft Internet Explorer',NN 返回 'Netscape'。
appVersion 返回瀏覽器版本,包括了大版本號、小版本號、語言、操作平臺等信息。
platform 返回瀏覽器的操作平臺,對於 Windows 9x 上的瀏覽器,返回 'Win32'(大小寫可能有差異)。
userAgent 返回以上全部信息。例如,IE5.01 返回 'Mozilla/4.0 (compatible; MSIE 5.01; Windows 98)'。
javaEnabled() 返回一個布爾值,代表當前瀏覽器允許不允許 Java。
screen 屏幕對象 反映了當前用戶的屏幕設置。
屬性
width 返回屏幕的寬度(像素數)。
height 返回屏幕的高度。
availWidth 返回屏幕的可用寬度(除去了一些不自動隱藏的類似任務欄的東西所占用的寬度)。
availHeight 返回屏幕的可用高度。
colorDepth 返回當前顏色設置所用的位數 - 1:黑白;8:256色;16:增強色;24/32:真彩色
window 窗口對象 最大的對象,它描述的是一個瀏覽器窗口。一般要引用它的屬性和方法時,不需要用“window.xxx”這種形式,而直接使用“xxx”。一個框架頁面也是一個窗口。
屬性
name 窗口的名稱,由打開它的連接()或框架頁()或某一個窗口調用的 open() 方法(見下)決定。一般我們不會用這個屬性。
status 指窗口下方的“狀態欄”所顯示的內容。通過對 status 賦值,可以改變狀態欄的顯示。
opener 用法:window.opener;返回打開本窗口的窗口對象。注意:返回的是一個窗口對象。如果窗口不是由其他窗口打開的,在 Netscape 中這個屬性返回 null;在 IE 中返回“未定義”(undefined)。undefined 在一定程度上等於 null。注意:undefined 不是 JavaScript 常數,如果你企圖使用“undefined”,那就真的返回“未定義”了。
self 指窗口本身,它返回的對象跟 window 對象是一模一樣的。最常用的是“self.close()”,放在
標記中:“關閉窗口”。
parent 返回窗口所屬的框架頁對象。
top 返回占據整個瀏覽器窗口的最頂端的框架頁對象。
history 曆史對象,見下。
location 地址對象,見下。
document 文檔對象,見下。
方法
open() 打開一個窗口。用法:open(, <窗口名稱字符串>, <參數字符串>);
  :描述所打開的窗口打開哪一個網頁。如果留空(''),則不打開任意網頁。
  <窗口名稱字符串>:描述被打開的窗口的名稱(window.name),可以使用'_top'、'_blank'等內建名稱。這裏的名稱跟“”裏的“target”屬性是一樣的。
  <參數字符串>:描述被打開的窗口的樣貌。如果只需要打開一個普通窗口,該字符串留空(''),如果要指定樣貌,就在字符串裏寫上一到多個參數,參數之間用逗號隔開。
例:打開一個 400 x 100 的幹淨的窗口:
open('','_blank','width=400,height=100,menubar=no,toolbar=no,
location=no,directories=no,status=no,scrollbars=yes,resizable=yes')
參數
top=# 窗口頂部離開屏幕頂部的像素數
left=# 窗口左端離開屏幕左端的像素數
width=# 窗口的寬度
height=# 窗口的高度
menubar=... 窗口有沒有菜單,取值yes或no
toolbar=... 窗口有沒有工具條,取值yes或no
location=... 窗口有沒有地址欄,取值yes或no
directories=... 窗口有沒有連接區,取值yes或no
scrollbars=... 窗口有沒有滾動條,取值yes或no
status=... 窗口有沒有狀態欄,取值yes或no
resizable=... 窗口給不給調整大小,取值yes或no
open() 方法有返回值,返回的就是它打開的窗口對象。所以,
var newWindow = open('','_blank');
這樣把一個新窗口賦值到“newWindow”變量中,以後通過“newWindow”變量就可以控制窗口了。
close() 關閉一個已打開的窗口。
用法:window.close() 或 self.close():關閉本窗口;
   <窗口對象>.close():關閉指定的窗口。
  如果該窗口有狀態欄,調用該方法後瀏覽器會警告:“網頁正在試圖關閉窗口,是否關閉?”然後等待用戶選擇是否;如果沒有狀態欄,調用該方法將直接關閉窗口。
blur() 使焦點從窗口移走,窗口變為“非活動窗口”。
focus() 是窗口獲得焦點,變為“活動窗口”。不過在 Windows 98,該方法只能使窗口的標題欄和任務欄上的相應按鈕閃爍,提示用戶該窗口正在試圖獲得焦點。
scrollTo() 用法:[<窗口對象>.]scrollTo(x, y);使窗口滾動,使文檔從左上角數起的(x, y)點滾動到窗口的左上角。
scrollBy() 用法:[<窗口對象>.]scrollBy(deltaX, deltaY);使窗口向右滾動 deltaX 像素,向下滾動 deltaY 像素。如果取負值,則向相反的方向滾動。
resizeTo() 用法:[<窗口對象>.]resizeTo(width, height);使窗口調整大小到寬 width 像素,高 height 像素。
resizeBy() 用法:[<窗口對象>.]resizeBy(deltaWidth, deltaHeight);使窗口調整大小,寬增大 deltaWidth 像素,高增大 deltaHeight 像素。如果取負值,則減少。
alert() 用法:alert(<字符串>);彈出一個只包含“確定”按鈕的對話框,顯示<字符串>的內容,整個文檔的讀取、Script 的運行都會暫停,直到用戶按下“確定”。
confirm() 用法:confirm(<字符串>);彈出一個包含“確定”和“取消”按鈕的對話框,顯示<字符串>的內容,要求用戶做出選擇,整個文檔的讀取、Script 的運行都會暫停。如果用戶按下“確定”,則返回 true 值,如果按下“取消”,則返回 false 值。
prompt() 用法:prompt(<字符串>[, <初始值>]);彈出一個包含“確認”“取消”和一個文本框的對話框,顯示<字符串>的內容,要求用戶在文本框輸入一些數據,整個文檔的讀取、Script 的運行都會暫停。如果用戶按下“確認”,則返回文本框裏已有的內容,如果用戶按下“取消”,則返回 null 值。如果指定<初始值>,則文本框裏會有默認值。
事件
onload; onunload; onresize; onblur; onfocus; onerror
history 曆史對象 曆史對象指瀏覽器的瀏覽曆史。鑒於安全性的需要,該對象收到很多限制,現在只剩下下列屬性和方法。
屬性
length 曆史的項數。JavaScript 所能管到的曆史被限制在用瀏覽器的“前進”“後退”鍵可以去到的範圍。本屬性返回的是“前進”和“後退”兩個按鍵之下包含的地址數的和。
方法
back() 後退,跟按下“後退”鍵是等效的。
forward() 前進,跟按下“前進”鍵是等效的。
go() 用法:history.go(x);在曆史的範圍內去到指定的一個地址。如果 x < 0,則後退 x 個地址,如果 x > 0,則前進 x 個地址,如果 x == 0,則刷新現在打開的網頁。history.go(0) 跟 location.reload() 是等效的。
location 地址對象 它描述的是某一個窗口對象所打開的地址。要表示當前窗口的地址,只需要使用“location”就行了;若要表示某一個窗口的地址,就使用“<窗口對象>.location”。
注意 屬於不同協議或不同主機的兩個地址之間不能互相引用對方的 location 對象,這是出於安全性的需要。例如,當前窗口打開的是“www.a.com”下面的某一頁,另外一個窗口(對象名為:bWindow)打開的是“www.b.com”的網頁。如果在當前窗口使用“bWindow.location”,就會出錯:“沒有權限”。這個錯誤是不能用錯誤處理程序(Event Handler,參閱 onerror 事件)來接收處理的。
屬性
protocol 返回地址的協議,取值為 'http:','https:','file:' 等等。
hostname 返回地址的主機名,例如,一個“http://www.microsoft.com/china/”的地址,location.hostname == 'www.microsoft.com'。
port 返回地址的端口號,一般 http 的端口號是 '80'。
host 返回主機名和端口號,如:'www.a.com:8080'。
pathname 返回路徑名,如“http://www.a.com/b/c.html”,location.pathname == 'b/c.html'。
hash 返回“#”以及以後的內容,如“http://www.a.com/b/c.html#chapter4”,location.hash == '#chapter4';如果地址裏沒有“#”,則返回空字符串。
search 返回“?”以及以後的內容,如“http://www.a.com/b/c.asp?selection=3&jumpto=4”,location.search == '?selection=3&jumpto=4';如果地址裏沒有“?”,則返回空字符串。
href 返回以上全部內容,也就是說,返回整個地址。在瀏覽器的地址欄上怎麼顯示它就怎麼返回。如果想一個窗口對象打開某地址,可以使用“location.href = '...'”,也可以直接用“location = '...'”來達到此目的。
方法
reload() 相當於按瀏覽器上的“刷新”(IE)或“Reload”(Netscape)鍵。
replace() 打開一個 URL,並取代曆史對象中當前位置的地址。用這個方法打開一個 URL 後,按下瀏覽器的“後退”鍵將不能返回到剛才的頁面。
frames[]; Frame 框架對象 請參閱“使用框架和 Cookies”一章。
document 文檔對象 描述當前窗口或指定窗口對象的文檔。它包含了文檔從到的內容。
  用法:document (當前窗口)
   或 <窗口對象>.document (指定窗口)
屬性
cookie 關於 cookie 請參看“使用框架和 Cookies”一章。
lastModified 當前文檔的最後修改日期,是一個 Date 對象。
referrer 如果當前文檔是通過點擊連接打開的,則 referrer 返回原來的 URL。
title 指標記裏用...定義的文字。在 Netscape 裏本屬性不接受賦值。
fgColor 指標記的 text 屬性所表示的文本顏色。
bgColor 指標記的 bgcolor 屬性所表示的背景顏色。
linkColor 指標記的 link 屬性所表示的連接顏色。
alinkColor 指標記的 alink 屬性所表示的活動連接顏色。
vlinkColor 指標記的 vlink 屬性所表示的已訪問連接顏色。
方法
open() 打開文檔以便 JavaScript 能向文檔的當前位置(指插入 JavaScript 的位置)寫入數據。通常不需要用這個方法,在需要的時候 JavaScript 自動調用。
write(); writeln() 向文檔寫入數據,所寫入的會當成標准文檔 HTML 來處理。writeln() 與 write() 的不同點在於,writeln() 在寫入數據以後會加一個換行。這個換行只是在 HTML 中換行,具體情況能不能夠是顯示出來的文字換行,要看插入 JavaScript 的位置而定。如在

標記中插入,這個換行也會體現在文檔中。
clear() 清空當前文檔。
close() 關閉文檔,停止寫入數據。如果用了 write[ln]() 或 clear() 方法,就一定要用 close() 方法來保證所做的更改能夠顯示出來。如果文檔還沒有完全讀取,也就是說,JavaScript 是插在文檔中的,那就不必使用該方法。
現在我們已經擁有足夠的知識來做以下這個很多網站都有的彈出式更新通知了。

當然也可以先寫好一個 HTML 文件,在 open() 方法中直接 load 這個文件。
anchors[]; links[]; Link 連接對象
用法:document.anchors[[x]]; document.links[[x]]; ;
  document.anchors 是一個數組,包含了文檔中所有錨標記(包含 name 屬性的
標記),按照在文檔中的次序,從 0 開始給每個錨標記定義了一個下標。
  document.links 也是一個數組,包含了文檔中所有連接標記(包含 href 屬性的
標記和標記段裏的標記),按照在文檔中的次序,從 0 開始給每個連接標記定義了一個下標。
  如果一個
標記既有 name 屬性,又有 href 屬性,則它既是一個 Anchor 對象,又是一個 Link 對象。
  在 IE 中,如果在
標記中添加“id="..."”屬性,則這個對象被賦予一個標識(ID),調用這個對象的時候只需要使用“”就行了。很多文檔部件都可以用這個方法來賦予 ID,但要注意不能有兩個 ID 相同。
anchors 和 links 作為數組,有數組的屬性和方法。單個 Anchor 對象沒有屬性;單個 Link 對象的屬性見下。
屬性
protocol; hostname; port; host; pathname; hash; search; href 與 location 對象相同。
target 返回/指定連接的目標窗口(字符串),與
標記裏的 target 屬性是一樣的。
事件
onclick; onmouseover; onmouseout; onmousedown; onmouseup
applets[] Java小程序對象 它是一個數組,包含了文檔中所有的 Applet 對象(Java 小程序)。作為一個數組,有數組的屬性和方法。關於單個 Applet 對象的屬性和方法,我引用一句話:“Applet 對象繼承了 Java 小程序的所有公共屬性和方法。”(英文原句:The Applet object inherits all public properties of the Java applet./The Applet object inherits all public methodss of the Java applet.) 因為本人很厭惡 Java 小程序,所以對它的什麼“公共”“私有”的問題不感興趣,也就沒有探討了。
embeds[] 插件對象 它是一個數組,包含了文檔中所有的插件(標記)。因為每個插件的不同,每個 Embed 對象也有不同的屬性和方法。
forms[]; Form 表單對象 document.forms[] 是一個數組,包含了文檔中所有的表單(
)。要引用單個表單,可以用 document.forms[x],但是一般來說,人們都會這樣做:在標記中加上“name="..."”屬性,那麼直接用“document.<表單名>”就可以引用了。
Form 對象的屬性
name 返回表單的名稱,也就是屬性。
action 返回/設定表單的提交地址,也就是屬性。
method 返回/設定表單的提交方法,也就是屬性。
target 返回/設定表單提交後返回的窗口,也就是屬性。
encoding 返回/設定表單提交內容的編碼方式,也就是屬性。
length 返回該表單所含元素的數目。
方法
reset() 重置表單。這與按下“重置”按鈕是一樣的。
submit() 提交表單。這與按下“提交”按鈕是一樣的。
事件
onreset; onsubmit
以下從“Button”到“Textarea”都是表單的元素對象。
Button 按鈕對象 由“”指定。引用一個 Button 對象,可以使用“<文檔對象>.<表單對象>.<按鈕名稱>”。<按鈕名稱>指在標記中的“name="..."”屬性的值。引用任意表單元素都可以用這種方法。
屬性
name 返回/設定用指定的元素名稱。
value 返回/設定用指定的元素的值。
form 返回包含本元素的表單對象。
方法
blur() 從對象中移走焦點。
focus() 讓對象獲得焦點。
click() 模擬鼠標點擊該對象。
事件
onclick; onmousedown; onmouseup
Checkbox 複選框對象 由“”指定。
屬性
name 返回/設定用指定的元素名稱。
value 返回/設定用指定的元素的值。
form 返回包含本元素的表單對象。
checked 返回/設定該複選框對象是否被選中。這是一個布爾值。
defaultChecked 返回/設定該複選框對象默認是否被選中。這是一個布爾值。
方法
blur() 從對象中移走焦點。
focus() 讓對象獲得焦點。
click() 模擬鼠標點擊該對象。
事件
onclick
elements[]; Element 表單元素對象 <表單對象>.elements 是一個數組,包含了該表單所有的對象。一般我們不用該數組,而直接引用各個具體的對象。
Hidden 隱藏對象 由“”指定。
屬性
name 返回/設定用指定的元素名稱。
value 返回/設定用指定的元素的值。
form 返回包含本元素的表單對象。
Password 密碼輸入區對象 由“”指定。
屬性
name 返回/設定用指定的元素名稱。
value 返回/設定密碼輸入區當前的值。
defaultValue 返回用指定的默認值。
form 返回包含本元素的表單對象。
方法
blur() 從對象中移走焦點。
focus() 讓對象獲得焦點。
select() 選中密碼輸入區裏全部文本。
事件
onchange
Radio 單選域對象 由“”指定。一組 Radio 對象有共同的名稱(name 屬性),這樣的話,document.formName.radioName 就成了一個數組。要訪問單個 Radio 對象就要用:document.formName.radioName[x]。
單個 Radio 對象的屬性
name 返回/設定用指定的元素名稱。
value 返回/設定用指定的元素的值。
form 返回包含本元素的表單對象。
checked 返回/設定該單選域對象是否被選中。這是一個布爾值。
defaultChecked 返回/設定該對象默認是否被選中。這是一個布爾值。
方法
blur() 從對象中移走焦點。
focus() 讓對象獲得焦點。
click() 模擬鼠標點擊該對象。
事件
onclick
Reset 重置按鈕對象 由“”指定。因為 Reset 也是按鈕,所以也有 Button 對象的屬性和方法。至於“onclick”事件,一般用 Form 對象的 onreset 代替。
Select 選擇區(下拉菜單、列表)對象 由“指定的元素名稱。
length 返回 Select 對象下選項的數目。
selectedIndex 返回被選中的選項的下標。這個下標就是在 options[] 數組中該選項的位置。如果 Select 對象允許多項選擇,則返回第一個被選中的選項的下標。
form 返回包含本元素的表單對象。
方法
blur() 從對象中移走焦點。
focus() 讓對象獲得焦點。
事件
onchange
options[]; Option 選擇項對象 options[] 是一個數組,包含了在同一個 Select 對象下的 Option 對象。Option 對象由“指定。因為 Submit 也是按鈕,所以也有 Button 對象的屬性和方法。至於“onclick”事件,一般用 Form 對象的 onsubmit 代替。
Text 文本框對象 由“”指定。Password 對象也是 Text 對象的一種,所以 Password 對象所有的屬性、方法和事件,Text 對象都有。
Textarea 多行文本輸入區對象 由“