javascript組成部分
一個完整的javascript實現應該由三個不同的部分組成:核心(ECMAScript)、文檔對象模型(DOM)、瀏覽器對象模型(BOM) Web瀏覽器只是ECMAScript實現可能的宿主環境之一。宿主環境不僅提供基本的ECMAScript實現,同時也會提供該語言的擴展,以便言語和環境之間對接交互。
ECMAScript語言郵下列組成:語法、類型、語句、關鍵字、保留字、操作符、對象 文檔對象模型(DOM):提供訪問和操作網頁內容的方法和接口 瀏覽器對象模型(BOM)提供與瀏覽器交互的方法與接口
javascript基本常識
1:javascirpt是嚴格區分大小寫的。
2:javascript(標識符)命名規則:第一個字符必須是一個字母、下劃線、美元符號,其它字符可以是字母、下劃線、美元符號或數字
3:ECMAScript標識符采用駝峰大小寫格式,也就是第一個字母小寫,剩下的每個單詞的首字母大寫。(但是沒有誰強制要求這個格式)
4:
//單行注釋
/*
*這是多行注釋
*/
5:每條語句最好用一個分號結尾,但是也可以省略分號。
6:
if (test)
alert(test); //有效但容易出錯,最好不要使用
if (test)
{
alert(test);//推薦使用
}
7:var obj; 像這樣未經過初始化的變量會保存一個特殊的值undefined
8:obj=100 這樣雖然有效,但不推薦,這樣相當于聲明了一個全局變量
9:ECMAScript有5種簡單數據類型:Undefined,Null,Boolean,Number和String
1種復雜數據類型Object
10:typeof操作符
var message = 'message';
typeof message
typeof(message)
11:Undefined類型只有一個值,即特殊的undefined
12:
var message;
alert(message)//undefined
alert(age);//報錯啦
13:最好顯示的初始化變量,這樣的話當typeof操作符返回undefined值時,我們就知道被檢測的變量沒有被聲明,而不是尚未初始化
因為沒有聲明的變量用typeof操作符就會直接返回undefined
14要將一個值轉換為其對應的Boolean值,可以調用轉型函數Boolean()
15Number類型:八進制字面值的第一位必須是零,十六進制的字面值的前兩位必須是Ox
浮點婁可以這樣:var floatNum = .1;但是不推薦這樣使用
如果浮點數小數點后面沒有任何數字,那個這個數值就可以被作為整數值來保存,同樣,如果浮點數本身就表示一個整數(如1.0)那么該值也會被轉換為整數
14:Number.MAX_VALUE整數的最大值
Number.MIN_VALUE整數的最小值
如果計算得到一個超出javascript數值范圍的值,那么這個數值自動轉換為特殊的Infinity,如果某次返回正的或負的Infinity值,那么該值將無法繼續參與下一次計算
要想確定一個數值是不是有窮的,可以使用isFinite()函數
訪問Number.NEGATIVE_INFINITY和Number.POSITIVE_INFINITY可以得到正和負的Infinity的值,所以其實這兩個屬性分別保存著-Infinity和Infinity
15NaN特點:1任何涉及到NaN的操作都會返回NaN,2NaN與任何值都不相等,其中包括NaN本身 isNaN()這個函數接受一個參數,該參數可以是任何類型,而此函數會幫我們確定這個參數是否“不是數值”
16parseInt能夠各種整數格式
Number(789)//不能轉換789Yun
parseInt("789Yun");
parseInt("0xa313",
16);//有基數設置 也可以轉換八進制
parseInt(""); //NaN
parseFloat只解析十進制值,因此它沒有用第二個參數指定基數的用法
parseFloat解析字符串,如果此字符串包含一個可解析為整數的數(沒有小數點或者小數點后面全部都是零) parseFloat()會返回整數
parseFloat("32.32")
17用雙引號表示的字符串和用單引號表示的字符串完全相同,任何字符串長度都可以通過其length屬性取得
轉換為字符串方法toString(),數值、布爾值、對象和字符串都有些方法,但null和undefined值沒有此方法
toString()如果是數值調用的話,還可以傳遞基數 eg:var a = 123; a.toString(16);
在不知道值為null或undefined值時,可以使用轉型函數String(),這個函數能夠將任何類型的值轉換為字符串,String()函數遵循轉換規則:1如果值有toString()方法,則調用該方法(沒有參數)返回相應的結果2如果值是null則返回"null"3如果值為undefined則返回"undefined"
18ECMAScript中的對象其實就是一組數據和功能的集合。在ECMAScript中,如果不能構造函數傳遞參數,則可以省略后面的那一對圓括號
如下所示
var obj = new Object();
var obj = new Object;
19Object的每個實例都具有下列屬性和方法
constructor保存著用于創建當前對象的函數
hasOwnProperty(propertyName)用于檢查給定的屬性在當前對象實例中(而不是在實例的原型中)是否存在
isPrototypeOf(object)用于檢查傳入的對象是否是另一個對象的原型
propertyIsEnumerable(propertyName)用于檢查給定的屬性是否能夠使用for-in語句
20with語句:
with (location) {
var qs = search.substring(1);
var hostName =
hostname;
var url = href;
}
21switch
var num = 25;
switch (true) {
case num < 0: alert('less than 0');
break;
case num >= 0 && num <= 10: alert('between 0 and 10');
break;
case num > 10 && num <= 20: alert('between 10 and 20');
break;
default: alert('more than 20');
}
switch語句在比較值時使用的是全等操作符,因此不會發生類型轉換
22函數中return語句之后的任何代碼都永遠不會執行
return 語句也可以不帶有任何返回值,這種情況 下,函數在停止執行后將返回undefined值
23通過arguments對象的length屬性可以獲得有多少個參數傳遞給了函數,沒有傳遞值的命名參數將自動被賦予undefined值(ECMAScript中的所有參數傳遞的都是值,不可能通過引用傳遞參數)
24ECMAScript函數沒有重載
25與其它語言不同,ECMAScript沒有為整數和浮點數值分別定義不同的數據類型,Numer類型可用于表示所有數值
26ECMAScript中無須指定函數的返回值,因為任何ECMAScript函數都可以在任何時候返回任何值
27ECMAScript函數中函數參數是以一個包含零或多個值的數組的形式傳遞的
28可以向ECMAScript函數傳遞任意數量的參數,并且可以通過arguments對象來訪問這些參數
在html中使用javascript
script屬性:
charset:表示通過src屬性指定的代碼的字符集
defer:表示腳本可以延遲到文檔完全被解析和顯示之后再執行
包含在script元素內部的javascript代碼將從上到下依次解釋
在javascript代碼的任何地方不要出現“</script>”字符串,因為按照解析嵌入式代碼的規則,當瀏覽器遇到字符串“</script>”時,就會認為那是結束的</script>標簽,而通過把這個字符串分隔為兩部分可解決這個問題
外部javascript文件帶有js擴展名,但這個擴展名不是必需的,因為瀏覽器 不會檢查包含javascript的文件的擴展名
帶有src屬性的<script>元素不應該在其<script>標簽與</script>標簽之間再包含額外的javascript代碼
另外通過<script>元素的src屬性還可以包含來自外部域的javascript文件
瀏覽器會按照<script>元素在頁面中出現的先后順序對它們依次進行解析
一般都把全部的javascript引用放在body元素中,放在頁面的內容后面。
<script>標簽定義了defer屬性,表明腳本在掛靠時不會影響頁面的構造,也就是說腳本會被延遲到整個頁面都解析完畢后再運行,因為在<script>元素中設置defer屬性( defer="defer" ),實際上與把script引用放到頁面最底部的效果是一樣的。(但是現在只有IE和Firefox3.1是目前唯一支持defer屬性的主流瀏覽器)
XHTML(Extensible Hypertext Markup Language)
編寫XHTML代碼的要比編寫html嚴格很多
CData片段是文檔中的一個特殊區域,這個區域中可以包含不需要解析的任何格式的文本內容,因此在在html中可以出現的小于號 加上了CData片段后也可以在XHTML文檔中正常運行了
如下所示:
<![CDATA[ function compare(a, b) { if (a < b) { alert('A is less than B'); } else { if (a > b) { alert('A is greater than B'); } else { alert('A is equal to B'); } } } ]]>
在兼容XHTML的瀏覽器,這個方法可以解決問題,但是實際上,還有不少瀏覽器不兼容XHTML,因為不支持CData片段,再使用javascipt注釋將CData標記注釋掉就行了
如下所示:
//<![CDATA[ function compare(a, b) { if (a < b) { alert('A is less than B'); } else { if (a > b) { alert('A is greater than B'); } else { alert('A is equal to B'); } } } //]]>
讓不支持<script>元素的瀏覽器能夠隱藏嵌入的javascript代碼, 這個方案就是把javascript代碼包含在一個html注釋中,
如下所示
<!-- function sayHi() { alert('Hi'); } //-->
其實作用外部文件比嵌入代碼的優勢主要體現在可維護性及可緩存(如果兩個頁面都作用同一個外部文件的話,那么這個文件只須下載一次)這兩方面
文檔模式:混雜模式與標準模式
<noscript>元素中的內容只有在瀏覽器不支持腳本或者瀏覽器支持腳本但腳本被禁用。瀏覽器支持腳本,也啟用腳本的情況下,不會出現noscript元素中的任何內容
eg:
<noscript>
<p>本頁面需要瀏覽器支持(啟用)JavaScript</p>
</noscript>
![]() |
不含病毒。www.avast.com |