javascript基礎部分javascript
1 數據類型:html
基礎數據類型(經過typeof來檢測):Number,string,undefined,null,boolean,functionjava
typeof只能檢測:number,string,boolean,undefined,function,object,沒法識別:null,regExparagument等細分對象類型;node
對象數據類型(以基礎數據類型爲基本,經過instanceof來檢測):isstring,isfunction,isarray,isNode etc.正則表達式
2 條件、循環語句express
if:編程
function age(){
var num=document.getElementById('age').value;
if(num<=18){
alert("你還未成年")
}
else if(num<=30){
alert("你是青年");
}
else{
alert("你老啦");
}
}數組
switch:瀏覽器
switch(num){
case 90:
msg="A"
break;
case 80:
msg="B"
break;
case 70:
msg="C"
break;
case 60:
msg="D"
break;
}
for:緩存
for(var i=0;i<=10;i=i+1){
s+=i;
}
3 DOM基礎
1、DOM基礎: 文檔對象模型(Doucment Object Model,DOM)是表示文檔(如HTML文檔、XML文檔)和訪問、操做構成文檔的各類元素的應用程序接口。HTML文檔的層次結構被表示成樹形結構
Node接口爲遍歷和操做樹定義了屬性和方法。Node對象的childNodes屬性將返回子節點的列表NodeList對象,firstChild、lastChild、nextSibling、previousSibling和parentNode屬性提供了遍歷樹的方法。appendChild()、removeChild()、replaceChild(old,new)和insertBefore()方法,能夠給文檔樹添加節點或從文檔中刪除節點。
1.節點(node)層次 Document--最頂層的節點,全部的其餘節點都是附屬於它的。 DocumentType--DTD引用(使用<!DOCTYPE>語法)的對象表現形式,它不能包含子節點。 DocumentFragment--能夠像Document同樣來保存其餘節點。 Element--表示起始標籤和結束標籤之間的內容,例如<tag></tab>或者<tag/>。這是惟一能夠同時包含特性和子節點的節點類型。 Attr--表明一對特性名和特性值。這個節點類型不能包含子節點。 Text--表明XML文檔中的在起始標籤和結束標籤之間,或者CDataSection內包含的普通文本。這個節點類型不能包含子節點。 CDataSection--<![CDATA[]]>的對象表現形式。這個節點類型僅能包含文本節點Text做爲子節點。 Entity--表示在DTD中的一個實體定義,例如<!ENTITY foo"foo">。這個節點類型不能包含子節點。 EntityReference--表明一個實體引用,例如"。這個節點類型不能包含子節點。 ProcessingInstruction--表明一個PI。這個節點類型不能包含子節點。 Comment--表明XML註釋。這個節點不能包含子節點。 Notation--表明在DTD中定義的記號。這個不多用到。
Node接口定義了全部節點類型都包含的特性和方法。
特性/方法 | 類型/返回類型 | 說明 |
nodeName | String | 節點的名字;根據節點的類型而定義 |
nodeValue | String | 節點的值;根據節點的類型而定義 |
nodeType | Number | 節點的類型常量值之一 |
ownerDocument | Document | 指向這個節點所屬的文檔 |
firstChild | Node | 指向在childNodes列表中的第一個節點 |
lastChild | Node | 指向在childNodes列表中的最後一個節點 |
childNodes | NodeList | 全部子節點的列表 |
previousSibling | Node | 指向前一個兄弟節點;若是這個節點就是第一個兄弟節點,那麼該值爲null |
nextSibling | Node | 指向後一個兄弟節點;若是這個節點就是最後一個兄弟節點,那麼該值爲null |
hasChildNodes() | Boolean | 當childNodes包含一個或多個節點時,返回真 |
attributes | NamedNodeMap | 包含了表明一個元素的特性的Attr對象;僅用於Element節點 |
appendChild(node) | Node | 將node添加到childNodes的末尾 |
removeChild(node) | Node | 從childNodes中刪除node |
replaceChild(newnode,oldnode) | Node | 將childNodes中的oldnode替換成newnode |
insertBefore(newnode,refnode) | Node | 在childNodes中的refnode以前插入newnodd |
除節點外,DOM還定義了一些助手對象,它們能夠和節點一塊兒使用,但不是DOM文檔必有的部分。 NodeList--節點數組,按照數值進行索引;用來表示和一個元素的子節點。 NamedNodeMap--同時使用數值和名字進行索引的節點表;用於表示元素特性。
2.訪問相關的節點 下面的幾節中考慮下面的HTML頁面
<html>
<head>
<title>DOM Example</title>
</head>
<body>
<p>Hello World!</p>
<p>Isn't this exciting?</p> <p>You're learning to use the DOM!</p> </body> </html>
3.處理特性 正如前面所提到的,即使Node接口已具備attributes方法,且已被全部類型的節點繼承,然而,只有 Element節點纔能有特性。Element節點的attributes屬性實際上是NameNodeMap,它提供一些用於訪問和處理其內容的方法: getNamedItem(name)--返回nodename屬性值等於name的節點; removeNamedItem(name)--刪除nodename屬性值等於name的節點; setNamedItem(node)--將node添加到列表中,按其nodeName屬性進行索引; item(pos)--像NodeList同樣,返回在位置pos的節點; 注:請記住這些方法都是返回一個Attr節點,而非特性值。
NamedNodeMap對象也有一個length屬性來指示它所包含的節點的數量。 當NamedNodeMap用於表示特性時,其中每一個節點都是Attr節點,這的nodeName屬性被設置爲特性名稱,而nodeValue屬性被設置爲特性的值。例如,假設有這樣一個元素: <p style="color:red" id="p1">Hello world!</p> 同時,假設變量oP包含指向這個元素的一個引用。因而能夠這樣訪問id特性的值: var sId = oP.attributes.getNamedItem("id").nodeValue; 固然,還能夠用數值方式訪問id特性,但這樣稍微有些不直觀: var sId = oP.attributes.item(1).nodeValue; 還能夠經過給nodeValue屬性賦新值來改變id特性: oP.attributes.getNamedItem("id").nodeValue="newId"; Attr節點也有一個徹底等同於(同時也徹底同步於)nodeValue屬性的value屬性,而且有name屬性和nodeName屬性保持同步。咱們能夠隨意使用這些屬性來修改或變動特性。 由於這個方法有些累贅,DOM又定義了三個元素方法來幫助訪問特性: getAttribute(name)--等於attributes.getNamedItem(name).value; setAttribute(name,newvalue)--等於attribute.getNamedItem(name).value=newvalue; removeAttribute(name)--等於attribute.removeNamedItem(name)。
4.訪問指定節點
(1)getElementsByTagName() 核心(XML) DOM定義了getElementsByTagName()方法,用來返回一個包含全部的tagName(標籤名)特性等於某個指定值的元素的NodeList。在Element對象中,tagName特性老是等於小於號以後緊跟隨的名稱--例如,<img />的tagName是"img"。下一行代碼返回文檔中全部<img />元素的列表: var oImgs = document.getElementsByTagName("img"); 把全部圖形都存於oImgs後,只需使用方括號或者Item()方法(getElementsByTagName()返回一個和childNodes同樣的NodeList),就能夠像訪問子節點那樣逐個訪問這些節點了: alert(oImgs[0].tagName); //outputs "IMG" 假如只想獲取在某個頁面第一個段落的全部圖像,能夠經過對第一個段落元素調用getElementsByTagName()來完成,像這樣: var oPs = document.getElementByTagName("p"); var oImgsInp = oPs[0].getElementByTagName("img"); 可使用一個星號的方法來獲取document中的全部元素: var oAllElements = document.getElementsByTagName("*"); 當參數是一個星號的時候,IE6.0並不返回全部的元素。必須使用document.all來替代它。
(2)getElementsByName() HTML DOM 定義了getElementsByName(),這用來獲取全部name特性等於指定值的元素的。
(3)getElementById() 這是HTML DOM定義的第二種方法,它將返回id特性等於指定值的元素。在HTML中,id特性是惟一的--這意味着沒有兩個元素能夠共享同一個id。毫無疑問這是從文檔樹中獲取單個指定元素最快的方法。 注:若是給定的ID匹配某個元素的name特性,IE6.0還會返回這個元素。這是一個bug,也是必須很是當心的一個問題。
5.建立新節點 最經常使用到的幾個方法是 createDocumentFragment()--建立文檔碎片節點 createElement(tagname)--建立標籤名爲tagname的元素 createTextNode(text)--建立包含文本text的文本節點
createElement()、createTextNode()、appendChild()
<html>
<head>
<title>createElement() Example</title>
<script type="text/javascript"> function createMessage() { var oP = document.createElement("p"); var oText = document.createTextNode("Hello World!"); oP.appendChild(oText); document.body.appendChild(oP); } </script> </head> <body onload="createMessage()"> </body> </html>
removeChild()、replaceChild()、insertBefore() 刪除節點
<html>
<head>
<title>removeChild() Example</title>
<script type="text/javascript"> function removeMessage() { var oP = document.body.getElementsByTagName("p")[0]; oP.parentNode.removeChild(oP); } </script> </head> <body onload="removeMessage()"> <p>Hello World!</p> </body> </html>
替換
<html>
<head>
<title>replaceChild() Example</title>
<script type="text/javascript"> function replaceMessage() { var oNewP = document.createElement("p"); var oText = document.createTextNode("Hello Universe!"); oNewP.appendChild(oText); var oOldP = document.body.getElementsByTagName("p")[0]; oOldP.parentNode.replaceChild(oNewP, oOldP); } </script> </head> <body onload="replaceMessage()"> <p>Hello World!</p> </body> </html>
新消息添加到舊消息以前
<html>
<head>
<title>insertBefore() Example</title>
<script type="text/javascript"> function insertMessage() { var oNewP = document.createElement("p"); var oText = document.createTextNode("Hello Universe!"); oNewP.appendChild(oText); var oOldP = document.getElementsByTagName("p")[0]; document.body.insertBefore(oNewP, oOldP); } </script> </head> <body onload="insertMessage()"> <p>Hello World!</p> </body> </html>
createDocumentFragment() 一旦把節點添加到document.body(或者它的後代節點)中,頁面就會更新並反映出這個變化。對於少許的更新,這是很好的,然而,當要向document添加大量數據時,若是逐個添加這些變更,這個過程有可能會十分緩慢。爲解決這個問題,能夠建立一個文檔碎片,把全部的新節點附加其上,而後把文檔碎片的內容一次性添加到document中,假如想建立十個新段落。
<html>
<head>
<title>insertBefore() Example</title>
<script type="text/javascript"> function addMessages() { var arrText = ["first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", "tenth"]; var oFragment = document.createDocumentFragment(); for (var i=0; i < arrText.length; i++) { var oP = document.createElement("p"); var oText = document.createTextNode(arrText[i]); oP.appendChild(oText); oFragment.appendChild(oP); } document.body.appendChild(oFragment); } </script> </head> <body onload="addMessages()"> </body> </html>
6.讓特性像屬性同樣 大部分狀況下,HTML DOM元素中包含的全部特性都是可做爲屬性。 假設有以下圖像元素: <img src = "mypicture.jpg" border=0 /> 若是要使用核心的DOM來獲取和設置src和border特性,那麼要用getAttribute()和setAttribute()方法: alert(oImg.getAttribute("src")); alert(oImg.getAttribute("border")); oImg.setAttribute("src","mypicture2.jpg"); oImg.setAttribute("border",1); 然而,使用HTML DOM,可使用一樣名稱的屬性來獲取和設置這些值: alert(oImg.src); alert(oImg.border); oImg.src="mypicture2.jpg"; oImg.border ="1"; 惟一的特性名和屬性名不同的特例是class屬性,它是用來指定應用於某個元素的一個CSS類,由於class在ECMAScript中是一個保留字,在javascript中,它不能被做爲變量名、屬性名或都函數名。因而,相應的屬性名就變成了className; 注:IE在setAttribute()上有很大的問題,最好儘量使用屬性。
7.table方法 爲了協助創建表格,HTML DOM給<table/>,<tbody/>和<tr/>等元素添加了一些特性和方法。 給<table/>元素添加了如下內容:
特性/方法 | 說明 |
caption | 指向<caption/>元素並將其放入表格 |
tBodies | <tbody/>元素的集合 |
tFoot | 指向<tfoot/>元素(若是存在) |
tHead | 指向<thead/>元素(若是存在) |
rows | 表格中全部行的集合 |
createTHead() | 建立<thead/>元素並將其放入表格 |
createTFood() | 建立<tfoot/>元素並將其放入表格 |
createCpation() | 建立<caption/>元素並將其放入表格 |
deleteTHead() | 刪除<thead/>元素 |
deleteTFood() | 刪除<tfoot/>元素 |
deleteCaption() | 刪除<caption/>元素 |
deleteRow(position) | 刪除指定位置上的行 |
insertRow(position) | 在rows集合中的指定位置上插入一個新行 |
<tbody/>元素添加了如下內容
特性/方法 | 說明 |
rows | <tbody/>中全部行的集合 |
deleteRow(position) | 刪除指定位置上的行 |
insertRow(position) | 在rows集合中的指定位置上插入一個新行 |
<tr/>元素添加了如下內容
特性/方法 | 說明 |
cells | <tr/>元素中全部的單元格的集合 |
deleteCell(postion) | 刪除給定位置上的單元格 |
insertCell(postion) | 在cells集合的給點位置上插入一個新的單元格 |
8.遍歷DOM NodeIterator,TreeWalker DOM Level2的功能,這些功能只有在Mozilla和Konqueror/Safari中才有
4 數組和對象
Javascript是由瀏覽器解釋運行的,因此其和操做系統也是無關的,也是平臺無關性的。
javascript的object類型
alert(box.reverse());返回一個倒序的數組
var box=[1,5,7,9,3,2];
Window對象的重要方法 alert() confirm() prompt()
向用戶顯示簡單的對話框,confirm()和prompt()用於獲取用戶的響應 close() 關閉窗口
focus() blur() 請求或放棄窗口的鍵盤焦點。focus()方法還經過把窗口提早到堆棧順序的最前面, 從而確保窗口可見
moveBy() moveTo() 移動窗口
open() 打開新的定義窗口,用指定的特性顯示指定的URL print() 打印窗口或框架中的內容,就像用戶點擊了窗口工具欄中的Print按鈕同樣(某些老版 本瀏覽器不支持此方法) resizeBy() resizeTo() 調整窗口大小 scrollBy() scrollTo() 滾動窗口中顯示的文檔 setInterval() clearInterval() 設置或者取消重複調用的函數,該函數在兩次調用之間有指定的延遲 setTimeout() clearTimeout() 設置或取消在指定的若干毫秒後要調用一次的函數
Window對象的onerror屬性比較特殊,若是給這個屬性賦一個函數,那麼只要這個窗口中發生JavaScript錯誤,該函數就會被調用,它就成了窗口的錯誤處理函數。定義onerror屬性方法,如: window.onerror=method; //注意method爲要處理錯誤調用的函數,不要();
Window.navigator屬性引用的是包含Web瀏覽器整體信息的Navigator對象
5 String
1.獲取字符串的長度:
var s = Hello world; document.write(length:+s.length); 2.爲字符串添加各類樣式,如: var txt ="Hello world"; document.write('length:' + txt.fontsize(15)); txt.big() txt.small() txt.bold() fixed() txt.strike() txt.link('http://www.w3school.com.cn')
3.獲取字符串中部份內容首次出現的位置 var hw_text = 'Hello world'; document.write(hw_text.indexOf('Hello')
4.內容替換: var str='Visit Microsoft!'; document.write(str.replace('Microsoft', 'W3School'));
5 要在字符串中添加換行符,須要使用轉義字符"\n": var confirmString = "You did not enter a response to the last " + "question.\n\nSubmit form anyway?"; var confirmValue = confirm(confirmString); 但這種方法只能用在像警告、確認對話框之類的狀況下,若是將這段文本做爲HTML內容呈現,就無效了,此時用"<br>"代替它: var confirmString = "You did not enter <br /> a response to the last "; document.write(confirmString);
6 將兩個或多個字符串拼接爲一個大的字符串,String對象還提供了方法concat(),它完成與"+"相同的功能: var longString = "One piece " + "plus one more piece.";
7 訪問字符串的子串 使用substring()或slice()方法, 還有一個方法是substr(),其原型爲: string.substr(start, length) substring()的原型爲: string.substring(from, to) substring()老是從兩個參數中較小的那個開始,到較大的那個結束
slice()的原型爲: string.slice(start, end) 參數start表示子串的起始位置,若是爲負數,那麼能夠理解爲倒數第幾個開始,例如-3表示從倒數第三個開始;參數end表示結束位置,與start一 樣,它也能夠爲負數,其含義也表示到倒數第幾個結束。slice()的參數能夠爲負數,因此要比substring()更加靈活,但沒那麼寬容了,若是 start比end要大,它將返回一個空字符串(示例略)。
8 字符串的大小寫轉換 使用toLowerCase()和toUpperCase()方法.
9 判斷兩個字符串是否相等 先將用戶的輸入值所有轉換爲大寫(或小寫),而後再行比較:== === != !== var name = document.form1.txtUserName.value.toLowerCase(); if(name == "urname")
var strA = "i love you!"; var strB = new String("i love you!");
這兩個變量含有相同的字符序列,但數據類型卻不一樣,前者爲string,後者爲object,在使用"=="操做符時,JavaScript會嘗試各類求值,以檢測二者是否會在某種狀況下相等。因此下面的表達式結果爲true: strA == strB。 第二種操做符是"嚴格"的"===",它在求值時不會這麼寬容,不會進行類型轉換。因此表達式strA === strB的值爲false,雖然兩個變量持有的值相同。 有時代碼的邏輯要求你判斷兩個值是否不相等,這裏也有兩個選擇:"!="和嚴格的"!==",它們的關係就相似於"=="和"==="。
if(document.form1.txtAge.value == someNumericVar) 也能夠提早轉換: if(parseInt(document.form1.txtAge.value) == someNumericVar)
10 字符串的查找 String對象有一個與indexOf()對應的方法,lastIndexOf():
使用string的indexOf()方法: strObj.indexOf(subString[, startIndex])
11 在Unicode值和字符串中的字符間轉換 strObj.charCodeAt(index) String.fromCharCode(c1, c2, ...) var strObj = "ABCDEFG"; var code = strObj.charCodeAt(2); // Unicode value of character 'C' is 67 若是index指定的索引處沒有字符,則返回值爲NaN。
要將Unicode編碼轉換爲一個字符,使用String.fromCharCode()方法,注意它是String對象的一個"靜態方法",也就是說在使用前不須要建立字符串實例:
var str = String.fromCharCode(72, 101, 108, 108, 111); // str == "Hello"
12 JavaScript中定義的轉義字符加單引號或雙引號來表示,如「/'」或「/"」。JavaScript的轉義序列有:
/0 NUL字符(/u0000)
/b 退格符(/u0008)
/t 水平製表符(/u0009)
/n 換行符(/u000A)
/v 垂直製表符(/u000B)
/f 換頁符(/u000C)
/r 回車符(/u000D)
/" 雙引號(/u0022)
/' 單引號或撇號(/u0027)
// 反斜槓(/u005C)
/xXX 由兩位十六進制數值XX指定的Latin-1字符
/uXXXX 由四位十六進制數XXXX指定的Unicode字符
/XXX 由一位到三位八進制數(1到377)指定的Latin-1字符。ECMAScript不支持。
6 Math方法
1.Math.random() -- 返回0和1之間的僞隨機數 可能爲0,但老是小於1,[0,1)。 Math.random()*10//返回 0-10 之間的隨機數。 隨機整數 Math.random()*(20-10)+10 //返回10-20之間的隨機數。
2 Math.floor() -- 向下取得一個最接近的整數 只取出其中的整數 Math.floor(12.2)// 返回12 Math.floor(12.0)//返回12
3 Math.ceil() -- 向上取得一個最接近的整數 Math.ceil(12.2)//返回13 Math.ceil(12.0)// 返回12
4 Math.round() -- 進行四捨五入 Math.round(12.2)// 返回12 Math.round(12.7)//返回13 Math.round(12.0)//返回12
7 Date類
Date方法 //UTC()世界協調時間,它會按照它的基準去計算,因此中國大陸是屬於東八區,因此時間要被加8個小時 alert(Date.UTC(2014,3,4,22,22,22,45));//返回的毫秒數 //若是沒有UTC()就返回本地時間
1 通用方法,new Date()獲得當前時間,但各個瀏覽器顯示的方法不一樣,因此不提倡使用
Date(2014,3,4,22,22,22,45); var date=new Date(2014,3,4,22,22,22,45);
alert(date); //返回Fri Apr 04 2014 22:22:22 GMT+0800 alert("toString: "+date.toString()); //返回Fri Apr 04 2014 22:22:22 GMT+0800 alert("toLocaleString: "+date.toLocaleString()); //返回2014年4月4日 22:22:22 alert("valueOf"+date.valueOf());//返回1396621342045
2 Date類型的日期格式化方法
var date=new Date(2014,3,4,22,22,22,45); alert(date.toDateString()); //Fri Apr 04 2014 alert(date.toTimeString());
//22:22:22 GMT+0800 alert(date.toLocaleDateString());//2014年4月4日 alert(date.toLocaleTimeString()); //22:22:22 alert(date.toUTCString()); //Fri, 04 Apr 2014 14:22:22 GMT
3 組件方法 date.get....或者date.set....各類方法的使用da.getYear(),da.getMonth() da.setHours(9);
alert(da.getUTCHours()); //返回上午1點(減去了8個小時) alert(da.getTimezoneOffset()); //計算本時區和UTC時區之間的差距,谷歌不支持
8 數據類型轉換
1從數字到字符串的轉換在JavaScript中是最常執行的。
咱們能夠經過如下方法顯式的實現:
var str = String(number);
var str = number + "";
var string = number.toString(); //number被轉換成Number對象,再調用Number.toString()方法
2這三種方法都回對結果字符串的數字進行適當舍入toFixed。
var n = 123456.789; n.toFixed(0); //"123457" n.toFixed(2); //"123456.79" n.toExponential(1); //"1.2e+5" n.toExponential(3); //"1.235e+5" n.toPrecision(4); //"1.235e+5" n.toPrecision(7); //"123456.8"
3 若是parseInt()和parseFloat()不能將指定的字符串轉換成數字,將返回NaN:
parseInt("3 abc"); //3 parseFloat("3.15 abc"); //3.15 parseInt("12.34"); //12 parseInt("0xFF"); //255
parseInt("eleven"); //NaN parseFloat("s12.35"); //NaN
9 定時器
1使用定時器實現JavaScript的延期執行或重複執行 window對象提供了兩個方法來實現定時器的效果,分別是window.setTimeout()和window.setInterval。其中前者可使一段代碼在指定時間後運行;然後者則可使一段代碼每過指定時間就運行一次。它們的原型以下: window.setTimeout(expression,milliseconds); window.setInterval(expression,milliseconds); 其中,expression能夠是用引號括起來的一段代碼,也能夠是一個函數名,到了指定的時間,系統便會自動調用該函數,當使用函數名做爲調用句柄時, 不能帶有任何參數;而使用字符串時,則能夠在其中寫入要傳遞的參數。兩個方法的第二個參數是milliseconds,表示延時或者重複執行的毫秒數。
2 window.setTimeout方法
這段代碼將使得頁面打開5秒鐘後顯示對話框「hello」。其中最後一句也能夠寫爲: window.setTimeout("hello()",5000);
function hello(){ alert("hello"); } window.setTimeout(hello,5000);
若是要取消顯示,只需單擊頁面任何一部分,就執行了window.clearTimeout方法,使得超時操做被取消。 function hello(){ alert("hello"); } var id=window.setTimeout(hello,5000); document.onclick=function(){ window.clearTimeout(id); z }
3 window.setInterval方法
該方法使得一個函數每隔固定時間被調用一次,是一個很經常使用的方法。若是想要取消定時執行,和clearTimeout方法相似,能夠調用 window.clearInterval方法。clearInterval方法一樣接收一個setInterval方法返回的值做爲參數。例如:
複製代碼 代碼以下:
//定義一個反覆執行的調用 var id=window.setInterval("somefunction",10000); //取消定時執行 window.clearInterval(id);
10 瀏覽器對象
Window對象是客戶端JavaScript的全局對象,它定義了大量的屬性和方法,提供給客戶對Web瀏覽器的窗口進行操做。它還定義了引用其餘重要對象的屬性(如引用Document對象的document屬性)。此外Window對象還包括兩個自我引用的屬性:window和self,可使用它們來直接引用Windwo對象。
Window對象的document屬性引用與這個窗口關聯在一塊兒的Document對象;location屬性引用與該窗口關聯在一塊兒的Location對象。Window對象還包括一個frames[]數組,引用表明原是窗口的框架的Window對象。所以,document表明的是當前窗口的Document對象,而frames[1].document引用的是當前窗口的第二個子框架的Document對象。
對於多窗口或多框架,除了考慮Window對象中定義的變量和函數的持續性外,還須要考慮Window對象自身的持續性。只要瀏覽器的頂級窗口存在,那表明它的Window對象會一直存在,對它的Window對象的引用都有效。
這意味着,Window對象的生存期可能比它包含和顯示的網頁長,也可能比它顯示的網頁所包含的腳本長。
若是JavaScript做爲一個文件中使用的惟一腳本,在<head>部分加入以下代碼:
<meta http equiv="Centent-Script-type" content="text/javascript">
這樣,就無需指定<script>的language和type屬性了。
若是<script>標籤包含了src屬性,瀏覽器會忽略<script>和</script>標記之間的代碼。
使用src性質能夠將JavaScript代碼與HTML代碼分離,從而簡化HTML文件;若是JavaScript函數被多個頁面共享,能夠將它們放置在單獨JavaScript文件中,使瀏覽器將其緩存起來,這樣能夠提升裝載速度;因爲src的值能夠是任意URL,所以來自一個Web服務器的JavaScript程序或網頁可使用由另外一個Web服務器輸出的代碼(如子程序庫)。
任何使用正規的URL的地方均可以使用javascript:URL。
11 建立對象後,咱們能夠經過"."運算符,在對象中建立新屬性、引用已有屬性、設置屬性值等。
var book = new Object();
book.title = "Book Title";//建立新屬性 設置屬性值
book.name = new Object();//
book.chaptor1 = new Object();//建立新屬性
book.chaptor1.title = "dd";// 設置屬性值
book.name.year = "20";
alert(book.name.year);
12 JavaScript 函數
1 因爲JavaScript是一種無類型語言,因此不能給函數的參數指定類型,JavaScript也不會檢測傳遞的參數的數據類型。並且JavaScript也不會檢測傳遞的參數的個數是否正確,若是參數比函數須要的個數多,多餘的值會被忽略;若是傳遞的參數比函數須要的個數少,缺乏處補undefined。
一樣,因爲JavaScript是一種無類型語言,因此無需定義函數的返回值類型,若是在函數體中不包含return語句,將返回undefined。
2 一樣,因爲JavaScript是一種無類型語言,因此無需定義函數的返回值類型,若是在函數體中不包含return語句,將返回undefined。
13 正則表達式定義
1 RegExp對象 構造函數RegExp()有兩個字符串參數,其中第二個參數是可選的,它們是"g"、"i"、"m"的組合。第一個參數是包含正則表達式主體的字符串,也就是正則表達式直接量中出現斜線之間的文本。
RegExp對象定義了兩個用於執行模式匹配操做的方法。 exec()方法與String的match()方法類似,它是以字符串爲參數的RegExp方法。exec()方法對一個指定的字符串執行一個正則表達式,也就是在一個字符串中檢索匹配。若是沒有匹配返回null,若是找到匹配返回一個數組。結果與match()方法的非全局檢索返回的數組同樣,而無論正則表達式中是否具備全局屬性g。
var patt1 = new RegExp("e");
var patt1 = /e/;
document.write(patt1.test("The best things in life are free")); //test();exec();compile()
2 正則表達式:
1 直接量,var pattern = /s$/; //與全部以字母"s"結尾的字符串匹配
2 構造函數,var pattern = new RegExp('s$');
var patt1=new RegExp("e");當您使用該 RegExp 對象在一個字符串中檢索時,將尋找的是字符 "e"。
RegExp 對象的方法 RegExp 對象有
3 個方法:test()、exec() 以及 compile()。
test() test() 方法檢索字符串中的指定值。返回值是 true 或 false。
例子: var patt1=new RegExp("e");
document.write(patt1.test("The best things in life are free")); 因爲該字符串中存在字母 "e",以上代碼的輸出將是:
14 JavaScript 變量
1 JavaScript的變量是無類型(untype)的 2 JavaScript的變量能夠存聽任何類型的值 3 JavaScript能夠在必要的時候自動將一種類型的值轉換成另一種類型。
4 在JavaScript中聲明一個變量的方法有: var i; var sum; var i,sum; var i =0; var sum = 20; var str = "hello";
若是一個變量被聲明瞭,可是沒有賦值,它的初始值就是undefined
5 在JavaScript中可使用var語句屢次聲明同一個變量,而不形成錯誤。 若是嘗試給一個未用var聲明的變量賦值,JavaScript會隱式地聲明這個變量,不過這個變量將被建立爲全局變量,即便是在一個函數體內。 若是嘗試讀一個未聲明的變量的值,JavaScript會生成一個錯誤。若是讀一個聲明後,未賦值的變量的值,將返回undefined
6 對於無用的存儲單元,JavaScript提供了一種無用存儲單元收集的方法,自動釋放無用的內存空間。
7 無論是全局變量仍是局部變量,JavaScrit都提供了一個獨立的對象來存儲它們。
15 JavaScript語句
1 複合語句:如語句塊。
if語句:
else if語句:
switch語言:JavaScript的switch語言與Java和C很是類似,但要注意,在JavaScript中switch語言匹配case表達式是用===等同運算符斷定的,而不是==相等運算符。
while語句:
do/while語句:
for語句:
for/in語句:for/in語句
但要注意,在JavaScript中switch語言匹配case表達式是用===等同運算符斷定的,而不是==相等運算符。
2 標籤語句:給語句或語句塊命名,經常使用於語句跳轉和引用。
break語句:
continue語句:
var語句:
function語句:
return語句:
throw語句:在JavaScript中,當發生運行時錯誤或程序明確地使用throw語句時就會拋出異常(exception),是用try/catch/finally語句能夠捕捉異常(這點很像Java的異常機制)。
try/catch/finally語句: 空語句 ;:空語句是不會執行任何操做的,但人們在實踐中發現,空語句在建立一個具備空主體的循環時是頗有用的。
16 JavaScript 詞法結構
1 字符集: JavaScript程序用的是Unicode字符集。因爲ASCII編碼和Latin-1編碼都是Unicode編碼的子集,因此用這兩種編碼寫的JavaScript程序都是絕對有效的。
2 大小寫敏感性: JavaScript是一種區分大小寫的語言。須要注意的一點是,HTML並不區分大小寫,而HTML常常會和JavaScript一塊兒使用,因此要注意不要把兩者的這一特性混淆使用。
3 可選的分號,在JavaScript中,爲分隔語句,在簡單語句後的分號(;)是可選的,爲了保持良好的編程習慣和增長代碼的可讀性,強烈建議養成使用分號的習慣。
4 註釋:JavaScript的註釋和Java的註釋很是相似,「//」做爲行註釋,「 /* 」和「 */ 」之間的全部內容都被註釋。
5 直接量:所謂直接量,就是程序中直接顯示出來的數據值。
6 標識符:所謂標識符,就是一個名字,一般用來命名變量、函數等。JavaScript中的標識符命名規則同Java等多種語言同樣,第一個字符必須以字母、下劃線(_)或美圓符號($)。此外,ECMAScript v3標準中還容許標識符中有Unicode轉義序列。所謂Unicode轉義序列,使字符/u後接4個十六進制數字,用來指定一個16位的字符編碼。
7 保留字:同許都其餘語言同樣,JavaScript中預留了許多保留字。包括
JavaScript關鍵字: break do if switch typeof case else in this var catch false instanceof throw void continue finally new true while default for null try with delete function return
8 ECMA擴展保留關鍵字: abstract double goto native static boolean enum inplements package super byte export import private synchronized char extends int protected throws class final interface public transient const float long short volatile debugger
9 要避免使用的其它標識符:其中包括應避免使用的JavaScript預約義的全局變量名或全局函數 arguments encodeURL Infinity Object String Array Erros isFinite parseFloat SyntaxError Boolean escape isNaN parseInt TypeError Date eval Math RanqeError underLoed decodeURI EvalError NaN ReferenceError unescape decodeURICompoment Function Number RegExp