- ECMAScript就是對實現(xiàn)該標準規(guī)定的各個方面內(nèi)容的語言的描述瘟则,它規(guī)定了這門語言的下列組成部分:語法、類型枝秤、語句醋拧、關(guān)鍵字、保留字淀弹、操作符丹壕、對象。
- DOM的作用是把頁面映射為一個多層節(jié)點結(jié)構(gòu)薇溃,開發(fā)人員通過DOM提供的API對HTML頁面的節(jié)點進行增刪改等操作菌赖。
- BOM從根本上講只處理瀏覽器窗口和框架。
- 雖然 JavaScript 和 ECMAScript 通常都被人們用來表達相同的含義沐序,但 JavaScript 的含義卻比 ECMA-262 中規(guī)定的要多得多琉用。一個完整的 JavaScript 實現(xiàn)應該由下列三個不同的部分組成:
核心(ECMAScript)
文檔對象模型(DOM)
瀏覽器對象模型(BOM) - DOM并不只是針對JavaScript的,很多別的語言也都實現(xiàn)了DOM策幼。
- <script>屬性:
async: 異步加載
defer: 立即下載邑时、延遲執(zhí)行 - 相對于嵌入JavaScript代碼,使用外部JavaScript文件的優(yōu)點有可維護性好特姐、優(yōu)化頁面加載速度(由于瀏覽器的緩存機制晶丘,如果倆個頁面都使用同一個文件,那么只需下載一次)
- <noscript>用于在不支持JavaScript的瀏覽器中顯示替代的內(nèi)容唐含。
- 文檔模式:混雜模式浅浮、標準模式和準標準模式。
ECMAScript中的一切(變量捷枯、函數(shù)名和操作符)都區(qū)分大小寫滚秩。 - ES5中引入了嚴格模式的概念,在頂部添加代碼:"use strict" 即可啟用淮捆。
alert(null == undefined); // true
- Number()可以把任何數(shù)據(jù)類型轉(zhuǎn)換為數(shù)值郁油,parseInt()和parseFloat()可以把字符串轉(zhuǎn)換為數(shù)值。
- 全等”===”只在兩個操作數(shù)未經(jīng)轉(zhuǎn)換就相等的情況下返回true争剿。
14.ECMAScript 中的對象其實就是一組數(shù)據(jù)和功能的集合已艰。
15.break 和 continue 語句用于在循環(huán)中精確地控制代碼的執(zhí)行。其中蚕苇,break 語句會立即退出循環(huán)哩掺,強制繼續(xù)執(zhí)行循環(huán)后面的語句。而 continue 語句雖然也是立即退出循環(huán)涩笤,但退出循環(huán)后會從循環(huán)的頂部繼續(xù)執(zhí)行嚼吞。
var num = 0;
for (var i=1; i < 10; i++) {
if (i % 5 == 0) {
break;
}
num++;
}
alert(num); //4
16.break 和 continue 語句都可以與 label 語句聯(lián)合使用盒件,從而返回代碼中特定的位置。這種聯(lián)合使用的情況多發(fā)生在循環(huán)嵌套的情況下舱禽,如:
var num = 0;
outermost:
for (var i = 0; i < 10; i++) {
for (var j = 0; j < 10; j++) {
if (i == 5 && j == 5) {
break outermost;
}
num++;
}
}
alert(num); //55
- 使用var操作符定義的變量為該變量作用域中的局部變量炒刁,省略var將會創(chuàng)建一個全局變量(不推薦,嚴格模式下報錯)誊稚。
- 數(shù)據(jù)類型:ECMAScript中有5種簡單數(shù)據(jù)類型(也稱為基本數(shù)據(jù)類型):Undefined翔始、Null、Boolean里伯、Number和String城瞎。還有1種復雜數(shù)據(jù)類型——Object,Object本質(zhì)上是由一組無序的名值對組成的疾瓮。
- ECMAScript能夠表示的最小數(shù)值保存在Number.MIN_VALUE中——在大多數(shù)瀏覽器中脖镀,這個值是5e-324;能夠表示的最大數(shù)值保存在Number.MAX_VALUE中——在大多數(shù)瀏覽器中狼电,這個值是1.7976931348623157e+308蜒灰。
- arguments 對象只是與數(shù)組類似(它并不是 Array 的實例),因為可以使用方括號語法訪問它的每一個元素(即第一個元素是 arguments[0]肩碟,第二個元素是 argumetns[1]强窖,以此類推),使用 length 屬性來確定傳遞進來多少個參數(shù)腾务。
- NaN是一個特殊的數(shù)值毕骡,isNaN()函數(shù)用于判斷一個值是否為數(shù)字,例如字符串"10"或Boolean值岩瘦。而任何不能被轉(zhuǎn)換為數(shù)值的值都會導致這個函數(shù)返回true。
- Object的每個實例都具有下列屬性和方法:
constructor:保存著用于創(chuàng)建當前對象的函數(shù)窿撬。對于前面的例子而言启昧,構(gòu)造函數(shù)(constructor)就是Object()。
hasOwnProperty(propertyName):用于檢查給定的屬性在當前對象實例中(而不是在實例的原型中)是否存在劈伴。
isPrototypeOf(object):用于檢查傳入的對象是否是傳入對象的原型密末。
propertyIsEnumerable(propertyName):用于檢查給定的屬性是否能夠使用for-in語句來枚舉。
toLocaleString():返回對象的字符串表示跛璧,該字符串與執(zhí)行環(huán)境的地區(qū)對應严里。
toString():返回對象的字符串表示。
valueOf():返回對象的字符串追城、數(shù)值或布爾值表示刹碾。通常與toString()方法的返回值相同。
由于在ECMAScript中Object是所有對象的基礎座柱,因此所有對象都具有這些基本的屬性和方法迷帜。
var obj1 = new Object();
var obj2 = obj1;
像這樣復制引用類型的值時物舒,其實只是相當于復制了一個指針,倆個變量指向的是同一個對象戏锹,所以當為obj1添加新的屬性時冠胯,obj2也可以訪問這個新屬性。不僅在變量中如此锦针,在函數(shù)的傳參時荠察,也遵循相同的原理。
- typeof()一般用來檢測基本數(shù)據(jù)類型奈搜,instanceof()用來檢測Object屬于什么類型的對象悉盆。
- 在執(zhí)行try-catch語句的catch塊或執(zhí)行with語句時,會在作用域鏈的前端臨時增加一個變量對象媚污。
- JavaScript具有自動垃圾收集機制舀瓢,最常用的是標記清楚。不過IE9之前COM對象的垃圾收集機制采用的是引用計數(shù)策略耗美,因此當在IE9之前涉及COM對象撩满,就會有循環(huán)引用的問題喜最。
- 合理利用垃圾收集機制還可以做到優(yōu)化瀏覽器性能,比如在程序中,一旦有數(shù)據(jù)不再有用树绩,可以將其設置為null來釋放它的引用,這種解除引用的方法適用于大多數(shù)全局變量和全局對象的屬性硬耍,解除引用后,數(shù)據(jù)脫離了執(zhí)行環(huán)境赶袄,下次垃圾收集器運行時便會將其回收,從而達到釋放內(nèi)存的優(yōu)化目的饿肺。
- 在WEB瀏覽器中蒋困,全局執(zhí)行環(huán)境被認為時window對象敬辣,因此所有全局變量和函數(shù)都是作為window對象的屬性和方法創(chuàng)建的。
- 作用域鏈的用途是保證對執(zhí)行環(huán)境有權(quán)訪問的所有變量和函數(shù)的有序訪問溉跃。