摘要:僅限數值表示新窗口的高度。此時只要檢查這個返回值就可以確定彈窗是否被屏蔽。返回一個布爾值,代表用戶選擇還是返回一個字符串或者,輸入了值并確定,返回字符串,其他方法關閉返回打印查找對話框。
ECMAScript是JavaScript的核心,但如果要在Web中使用JavaScript,那么BOM(瀏覽器對象模型)則無疑才是真正的核心。
W3C為了把瀏覽器中JavaScript最基本的部分標準化,已經將BOM的主要方面納入了HTML5規范中
window對象BOM 的核心對是window,它表示瀏覽器的一個實例。在瀏覽器中window對象既是通過JavaScript訪問瀏覽器窗口的一個接口,又是ECMAScript規定的Global對象,因此有權訪問parseInt()等方法
全局作用域所有在全局作用域中聲明的變量、函數都會變成window對象的屬性和方法。
定義全局變量與直接在window對象上定義屬性還是有一點差別:全局變量不能通過delete操作符刪除,而直接定義在window對象上的屬性可以
var age = 29; window.color = "red"; // 在IE < 9 時拋出錯誤,在其他瀏覽器里返回 false delete window.age; // 在IE < 9 時拋出錯誤,在其他瀏覽器里返回 true delete window.color; console.log(window.age); // 29 console.log(window.color); // undefined
全局環境下使用var語句添加的window屬性有一個名為[[Configruable]]的特性,這個特性的值被設置為false,因此不可通過delete刪除。IE8及更早版本在遇到使用delete刪除window屬性的語句時,不管該屬性最初如何創建的,都會拋出錯誤,以示警告。
嘗試訪問未聲明的屬性會拋出錯誤,但是通過查詢window對象,可以知道某個可能未聲明的變量是否存在
// 這里會拋出錯誤 oldValue 未定義 var newValue = oldValue; // 這里不會拋出錯誤,因為這是一次屬性查詢 // newValue的值是 undefined var newValue = window.oldValue;窗口關系及框架
如果頁面中包含框架,則每個框架都擁有自己的window對象,并且保存在frames集合中。
在frames集合中,可以通過數值索引(從0開始,從左至右,從上到下)或者框架名稱來訪問相應的window對象。每個window對象都有一個name屬性,其中包含框架的名稱。
Frameset Example
可以通過window.frames[0]或者window.frames["topFrame"]來引用上方的框架,不過最好使用top而非window。例如 top.frames[0]
top對象始終指向最高(最外層)的框架,也就是瀏覽器窗口。
與top相對的另一個window對象是parent。parent(父)對象始終指向當前框架的直接上層框架。在某些情況下parent有可能等于top,但在沒有框架的情況下,parent一定等于top。此時他們都是window
窗口位置
用來確定和修改window對象位置的屬性和方法有很多。
IE, Safari, Opera, Chrome 都提供了screenLeft 和 screenTop屬性,分別用于表示相對屏幕左邊和上邊的位置。
Firefox 則在 screenX 和 screenY 屬性中提供相同的窗口位置信息, Safari, Chrome也同時支持這兩個屬性。
Opera雖然支持 screenX 和 screenY 屬性,但與 screenLeft 和 screenTop 并不對應,因此建議大家不要在 Opera中使用。
使用下列代碼可以跨瀏覽器取得窗口左邊和上邊的位置
// 確定 screenLeft 和 screenTop 屬性是否存在 // 存在,是在 IE, Safari, Opera, Chrome // 否則,是在 Firefox中 var leftPos = (typeof window.screenLeft == "number") ? window.screenLeft : window.screenX; var topPos = (typeof window.screenTop == "number") ? window.screenTop : window.screenY;
在IE Opera 中,返回的是頁面到屏幕邊緣的距離(不包括瀏覽器的工具欄等),而 Chrome Firefox Safari 返回的是瀏覽器到屏幕邊緣的距離(包括瀏覽器的工具欄等)。
更讓人抓狂的是, Firefox Safari Chrome 始終返回頁面中每個框架的 top.screenX top.screenY 值。即使在頁面由于被設置了外邊距發生偏移的情況下,相對于window對象使用top.screenX top.screenY每次也都會返回相同的值。而IE Opera則會給出框架相對于屏幕辯解的精確坐標值。
最終結果是無法在跨瀏覽器的條件下取得窗口左邊和上邊的精確坐標值。
使用moveTo() 和 moveBy()方法,倒是有可能將窗口的精確地移動到一個新位置。這兩個方法都接受兩個參數
// 將窗口移動到屏幕左上角 window.moveTo(0, 0); // 將窗口向下移動100像素 window.moveBy(0, 100); // 將窗口移動到(200, 300) window.moveTo(200, 300); // 將窗口向左移動50像素 window.moveBy(-50, 0);
需要注意的是,這兩個方法可能會被瀏覽器禁用;而且在Opera和IE7+中默認就是禁用的。
這兩個方法都不適用于框架,只能對最外層的window對象使用。
窗口大小
跨瀏覽器確定一個窗口的大小不是一件簡單的事情。
IE9+ Firefox Safari Opera Chrome 均為此提供了4個屬性:innerwidth innerHeight outerWidth outerHeight。
IE9 Safari Firefox 中 outerWidth outerHeight 返回瀏覽器窗口本身的尺寸(無論是從最外層的window對象還是從某個框架訪問)。
Opera中這兩個屬性的值表示頁面視圖容器的大小。
innerwidth innerHeight則表示容器中頁面視圖區的大小(減去邊框寬度)。
Chrome 中 四個值返回的相同,即視口(viewport)大小而非瀏覽器窗口大小。
下面的代碼可以跨瀏覽器取得視口大小,但最終無法確定瀏覽器窗口本身大小
var pageWidth = window.innerWidth; var pageHeight = window.innerHeight; // document.compatMode 這個屬性將在第10章討論 if (typeof pageWidth != "number") { if (document.compatMode == "CSS1Compat") { pageWidth = document.documentElement.clientWidth; pageHeight = document.documentElement.clientHeight; } else { pageWidth = document.body.clientWidth; pageHeight = document.body.clientHeight; } }
使用 resizeTo() 和 resizeBy() 方法可以調整瀏覽器窗口的大小。需要注意,這兩個方法也可能被瀏覽器禁用。在Opera和IE7+中默認禁止
這兩個方法不適用于框架,只能對最外層的window對象使用
// 調整到 100 x 100 window.resizeTo(100, 100); // 調整到 200 x 150 window.resizeBy(100, 50); // 調整到 300 x 300 window.resizeTo(300, 300);導航和打開窗口
window.open() 方法既可以導航到一個特定的URL,也可以打開一個新的瀏覽器窗口。接受四個參數:
要加載的URL
窗口目標 (窗口或者框架的名字以及特殊窗口名稱: _self, _parent, _top, _blank)
特性字符串(新窗口的特性設置,逗號分隔)
表示新頁面是否取代瀏覽器歷史記錄中當前加載頁面的布爾值
// 等同于 window.open("http://www.wrox.com", "topFrame");
如果給window.open()傳遞的第二個參數并不是一個已經存在的窗口或者框架,那么該方法就會根據在第三個參數位置上傳入的字符串創建一個新窗口或者新標簽。
如果沒有傳入第三個參數,那么就會打開一個帶有全部默認設置(工具欄、地址欄和狀態欄等)的新瀏覽器窗口(或者新標簽)。
在不打開新窗口的情況下,會忽略第三個參數。
第三個參數是一個逗號分隔的設置字符串,表示新窗口有哪些特性。
設置 | 值 | 說明 |
---|---|---|
fullscreen | yes/no | 表示瀏覽器窗口是否最大化。僅限IE |
height | 數值 | 表示新窗口的高度。不能小于100 |
width | 數值 | 表示新窗口的寬度。不能小于100 |
left | 數值 | 左坐標,不能是負值 |
top | 數值 | 上坐標。不能是負值 |
location | yes/no | 表示是否在瀏覽器窗口中顯示地址欄。不同瀏覽器的默認值不同。如果設置為no,地址欄可能會隱藏,也可能會禁用,取決于瀏覽器 |
menubar | yes/no | 是否顯示菜單欄。默認no |
resizeable | yes/no | 是可以拖動窗口大小。默認值no |
scrollbars | yes/no | 是否允許滾動。默認no |
status | yes/no | 是否顯示狀態欄。默認no |
toolbar | yes/no | 是否顯示工具欄。默認no |
window.open()方法會返回一個指向新窗口的引用,大致與其他window對象一致,但我們可以進行更多操作控制。
例如有些瀏覽器針對通過window.open()創建的還口不允許我們針對朱瀏覽器窗口調整大小或移動位置,但卻允許我們針對通過window.open()創建的窗口調整大小或移動位置。
var wroxWin = window.open("http://www.wrox.com", "wroxWindow", "height=400,width=400,top=10,left=10,resizable=yes"); // 新創建的window對象有一個opener屬性 // 保存打開它的原始窗口對象 // 而原始窗口不跟蹤打開的新窗口,沒有指向新窗口對象的屬性 console.log(wroxWin.opener == window); // true // 調整大小 wroxWin.resizeTo(500, 500); // 移動位置 wroxWin.moveTo(100, 100); // 關閉新打開的窗口 // 這個方法僅限于通過 window.open() 打開的彈出窗口 // 對于主窗口如果沒有得到用于的允許是不能關閉它的。 wroxWin.close(); // 彈窗關閉后,窗口的引用仍然還在 // 但除了檢測其closed屬性沒有其他用處 console.log(wroxWin.closed); // true
有些瀏覽器(如IE8 和 Chrome)會在獨立的進程運行每一個標簽頁。當一個標簽打開另一個標簽頁時,如果兩個window對象之間需要彼此通信,那么新標簽就不能運行在獨立的進程中。
在Chrome中新建的標簽頁opener屬性設置為null,即表示在多帶帶的進程中運行新標簽
var wroxWin = window.open("http://www.wrox.com", "wroxWindow", "height=400,width=400,top=10,left=10,resizable=yes"); wroxWin.opener = null;
目前大部分瀏覽器都不能通過第四個參數修改是否顯示狀態欄,不允許彈窗到屏幕意外,不允許關閉地址等等,加強彈窗的安全性,以免用戶和系統對話框混淆。
Chrome采取了不同的處理方式,它不會像其他瀏覽器那樣簡單的屏蔽這些彈窗,而是只是顯示它們的標題欄,并放在窗口右下角。
大部分瀏覽器或者瀏覽器插件都會屏蔽彈窗,此時window.open()很可能返回null。此時只要檢查這個返回值就可以確定彈窗是否被屏蔽。
var wroxWin = window.open("http://www.wrox.com", "_blank"); if (wroxWin == null) { console.log("The popup was blocked!"); }
瀏覽器拓展程序(插件)或其他程序阻止彈窗,那么 window.open()通常會拋出錯誤。因此不但要檢測返回值,還要將對 window.open()的調用封裝在一個 try-catch 塊中
var bloacked = false; try { var wroxWin = window.open("http://www.wrox.com", "_blank"); if (wroxWin == null) { bloacked = true; } } catch (ex) { bloacked = true; } if (blocked) { console.log("The popup was blocked!"); }間歇調用和超時調用
JavaScript是單線程語言,但它允許通過設置超時值和間歇值來調度代碼在特定的時刻執行。
// 第一個參數傳遞字符串,不推薦! setTimeout("alert("Hello World!");", 1000); // 推薦的方式 setTimeout(() => { alert("Hello World!"); }, 1000);
JavaScript是一個單線程解釋器,因此一定時間內只能執行一段代碼。為了控制要執行的代碼,就有一個JavaScript任務隊列。這些任務會按照將他們添加到隊列中的順序執行。
第二個參數是告訴JavaScript再過多久把當前任務添加到隊列中。之后如果隊列是空的,那么添加的代碼會立即執行,如果不是空的,那么就要等前面的代碼執行完了以后再執行。
該方法會返回一個數值ID,這是計劃執行代碼的唯一標識符,可以通過它來取消超時調用。
var timeoutId = setTimeout(() => { alert("Hello World!"); }, 1000); // 取消執行 clearTimeout(timeoutId);
超時調用的代碼都是在全局作用域中執行的,因此函數中 this 的值在非嚴格模式下 指向 window ,在嚴格模式下是 undefined。
setInterval()用法與上述類似
系統對話框alert(), confirm(), prompt() 方法可以調用系統對話框向用戶顯示消息。系統對話框與瀏覽器中顯示的網頁沒有關系,不包含HTML,外觀由操作系統和瀏覽器設置決定。打開對話框都是同步和模態的。也就是說,這些對話顯示的時候,代碼會停止執行,而關掉這些對話框又會恢復執行。
confim() 返回一個布爾值,代表用戶選擇"ok"還是"cancel"
prompt() 返回一個字符串或者null,輸入了值并確定,返回字符串,其他方法關閉返回null
打印、查找 對話框 print() find()。沒什么卵用
location對象location是最有用的BOM對象之一,它提供了與當前窗口中加載的文檔有關的信息,還提供一些導航功能。
location 對象既是window對象的屬性,也是document對象的屬性;換言之,window.location document.location引用的是同一個對象。
屬性名 | 例子 | 說明 |
---|---|---|
hash | "#contents" | 返回 URL 中的hash(#號后跟零或多個字符),如果URL中不包含散列,則返回空字符串 |
host | "www.wrox.com:80" | 返回服務器名稱和端口號(如果有) |
hostname | "www.wrox.com" | 返回服務器名稱不帶端口號 |
href | "http:/www.wrox.com" | 返回當前加載頁面的完整URL。而location對象的toString()方法也返回這個值 |
pathname | "/WileyCDA/" | 返回URL中的目錄或者文件名 |
port | "www.wrox.com" | 返回端口號。如果沒有端口號,返回空字符串 |
protocol | "http:" | 返回頁面使用的協議。通常是 http: https: |
search | "?q=javascript | 返回URL查詢字符串。這個字符串以問號開頭 |
雖然上表的屬性可以訪問到location對象大多數信息,但是其中訪問URL包含查詢字符串的屬性并不方便。盡管location.search返回從問號到URL末尾的所有內容,但卻沒有辦法逐個訪問其中的每個查詢字符串參數。
為此我們可以創建如下函數
funcction getQueryStringArgs() { // 取得查詢字符串并去掉開頭的問號 var qs = (location.search.length > 0 ? location.search.substring(1) : ""); // 保存數據的對象 var args = {}; // 取得每一項 var items = qs.length ? qs.split("&") : []; var item = null; var name = null; var value = null; // 在for循環中使用 var i = 0; var len = items.length; // 逐個將每一項添加到args對象中 for (var i = 0; i < len; i++) { item = items[i].split("="); name = decodeURIComponent(item[0]); value = decodeURIComponent(item[1]); if (name.length) { args[name] = value; } } return args; }位置操作
使用location對象可以通過很多方式來改變瀏覽器的位置。
首先也是最常用的方式 assign()方法,并為其傳遞一個URL。立即打開新的URL并在瀏覽器的歷史記錄中生成一條記錄。如果是將location.href或window.location設置為一個URL值,也會以該值調用assign()方法。
location.assign("http://www.wrox.com"); window.location = "http://www.wrox.com"; location.;
另外修改location對象的其他屬性也可以改變當前加載的頁面。下面的例子展示了通過將hash, search, hostname, pathname, prot 屬性設置為新值來改變URL
// 假設初始URL為 http://www.wrox.com/WileyCDA/ // 將URL修改為 http://www.wrox.com/wileyCDA/#section1 location.hash = "#section1"; // 將URL修改為 http://www.wrox.com/wileyCDA/?q=javascript location.search = "?q=javascript"; // 將URL修改為 http://www.wrox.com/wileyCDA/ location.hostname = "www.yahoo.com" // 將URL修改為 http://www.yahoo.com/mydir/ location.pathname = "mydir" // 將URL修改為 http://www.yahoo.com:8080/wileyCDA/ location.port = 8080;
每次修改location屬性(hash除外),頁面都會以新URL重新加載
通過上述任何一種方式修改URL之后,瀏覽器的歷史記錄中就會生成一條新紀錄,因此用戶通過單擊“后退”按鈕都會導航到前一個頁面。要禁用這種行為,可以使用replace()方法。這個方法只接受一個參數,即要盜號的URL。雖然結果會導致瀏覽器位置改變,但不會在歷史記錄中生成新記錄。在調用replace()方法后,用戶不能回到前一個頁面
在IE8 Firefox 1 Safari 2+ Opera9+ Chrome 中,修改hash的值會在瀏覽器的歷史記錄中生成一條記錄。在IE早期版本中,hash屬性不會再用戶單擊“后退”和“前進”按鈕時被更新,而只會在用戶單擊包含hash的URL時才會被更新
reload() 作用是重新加載當前頁面的顯示。如果不傳參,頁面就會以最有效的方式重新加載。如果頁面上次請求一來并沒有改變過,頁面就會從瀏覽器緩存中重新加載。如果要強制從服務器重新加載,則需要像下面這樣為該方法傳遞參數true
位于reload()調用之后的代碼可能會也可能不會執行,這要取決于網絡延遲或系統資源等因素。為此最好將reload()放在代碼的最后一行
navigator對象每個瀏覽器中的navigator對象表現是一致的,也有一套自己的屬性
屬性或方法 | 說明 | IE | Firefox | Safari/Chrome | Opera |
---|---|---|---|---|---|
appCodeName | 瀏覽器的名稱。通常都是Mozilla,即使在非Mozilla瀏覽器中也是如此 | 3.0+ | 1.0+ | 1.0+ | 7.0+ |
appMinorVersion | 次版本 | 4.0+ | - | - | 9.5+ |
appName | 完整的瀏覽器名稱 | 3.0+ | 1.0+ | 1.0+ | 7.0+ |
appVersion | 瀏覽器的版本。一般不與實際的瀏覽器版本對應 | 3.0+ | 1.0+ | 1.0+ | 7.0+ |
buildID | 瀏覽器變異版本 | - | 2.0+ | - | - |
cookieEnabled | 表示cookie是否啟用 | 4.0+ | 1.0+ | 1.0+ | 7.0+ |
cpuClass | 客戶端計算機中使用的cpu類型 | 4.0+ | - | - | - |
javaEnabled() | 表示當前瀏覽器中是否啟用了java | 4.0+ | 1.0+ | 1.0+ | 7.0+ |
language | 瀏覽器的主語言 | - | 1.0+ | 1.0+ | 7.0+ |
mineTypes | 表示當前瀏覽中注冊的MIME類型數組 | 4.0+ | 1.0+ | 1.0+ | 7.0+ |
onLine | 表示瀏覽器是否連接到了因特網 | 4.0+ | 1.0+ | - | 9.5+ |
oscpu | 客戶端計算機的操作系統或使用的CPU | - | 1.5+ | - | - |
platform | 瀏覽器所在的系統平臺 | 4.0+ | 1.0+ | 1.0+ | 7.0+ |
plugins | 瀏覽器中安裝的插件信息的數組 | 4.0+ | 1.0+ | 1.0+ | 7.0+ |
preference | 設置用戶的首選項 | - | 1.5+ | - | - |
product | 產品名稱 如Gecko | - | 1.0+ | 1.0+ | - |
productSub | 關于產品的次要信息 | - | 1.0+ | 1.0+ | - |
registerContentHandler() | 針對特定的MIME類型將一個站點注冊為處理程序 | - | 2.0+ | - | - |
registerProtocolHandler() | 針對特定的協議將一個站點注冊為處理程序 | - | 2.0+ | - | - |
securityPolicy | 已經廢棄。安全策略的名稱。為了與Netscape Navigator4向后兼容而保留下來 | - | 1.0+ | - | - |
systemLanguage | 操作系統的語言 | 4.0+ | - | - | - |
taintEnabled() | 已廢棄。表示是否允許變量被修改。為了與Netscape Navigator3向后兼容而保留下來 | 4.0+ | 1.0+ | - | 7.0 |
userAgent | 瀏覽器的用戶代碼字符串 | 3.0+ | 1.0+ | 1.0+ | 7.0+ |
userLanguage | 操作系統的默認語言 | 4.0+ | - | - | 7.0+ |
userProfile | 借以訪問用戶個人信息的對象 | 4.0+ | - | - | - |
vendor | 瀏覽器的品牌 | - | 1.0+ | 1.0+ | - |
vendorSub | 有關供應商的次要信息 | - | 1.0+ | 1.0+ | - |
檢測瀏覽器中是否安裝了特定的插件是一種最常見的檢測歷程。對于非IE瀏覽器,可以使用plugins數組來達到這個目的。該數組中的每一項都包含下列屬性。
name: 插件名字
description: 插件的描述
filename: 插件的文件名
length: 插件所處理的MIME類型數量
一般來說name屬性中會包含檢測插件必需的所有信息,但有時候也不完全如此。在檢測插件時,需要像下面這樣循環代碼每個插件并將插件的name與給定的名字進行比較
// 檢測插件(在IE中無效) function hasPlugin(name) { name = name.toLowerCase(); for (var i=0; i < navigator.plugins.length; i++) { if (navigator.plugins[i].name.toLowerCase().indexOf(name) > -1) { return true; } } return false; } // 檢測flash console.log(hasPlugin("Flash")); // 檢測QuickTime console.log(hasPlugin("QuickTime"));
檢測IE中的插件比較麻煩,因為IE不支持Netscape式的插件,唯一的方式是使用專用的ActiveXObject類型,并嘗試創建一個特定插件的實例。IE是以COM對象的方式實現插件的,而COM對象使用唯一標識符來標識。因此要想檢測特定的插件,就必須知道其COM標識符,例如Flash的標識符是ShockwaveFlash.ShockwaveFlash。知道唯一標識符后,就可以編寫下面的函數來檢測
// 檢測IE中的插件 function hasIEPlugin(name) { try { new ActiveXObject(name); return true } catch (ex) { return false; } } // 檢測flash console.log(hasIEPlugin("ShockwaveFlash.ShockwaveFlash")); // 檢測QuickTime console.log(hasIEPlugin("QuickTime.QuickTime"));
鑒于兩種方式差別較大,典型的做法是針對每個插件分別創建檢測函數
// 檢測所有瀏覽器中的Flash function hasFlash() { var result = hasPlugin("Flash"); if (!result) { result = hasIEPlugin("ShockwaveFlash.ShockwaveFlash"); } return result; }
plugins集合有一個名叫refresh()的方法,用于刷新plugins以反映最新安裝的插件。這個方法接收一個參數:表示是否應該重新加載頁面的一個布爾值。如果將這個值設為true,則會重新加載包含插件的所有頁面;否則只更新plugins集合,不重新加載頁面。
注冊處理程序registerContentHandler() 和 registerProtocolHandler() 方法可以讓一個站點知名它可以處理特定類型的信息。隨著RSS閱讀器和在線電子郵件程序的信息,注冊處理程序就為像使用桌面應用程序一樣默認使用這些在線應用程序提供了一種方式。
registerContentHandler()接收三個參數:
要處理的MIME類型
可以處理的MIME類型的頁面的URL
應用程序的名稱
// 要將一個站點注冊為處理RSS源的處理程序 navigator.registerContentHandler("application/rss+xml", "http://www.somereader.com?feed=%s", "Some Reader");
registerProtocolHandler() 也是三個參數
要處理的協議 (mailto 或 ftp)
處理該協議的頁面的URL
應用程序的名稱
// 要將一個應用程序注冊為默認的郵件客戶端 navigator.registerProtocolHandler("mailto", "http://www.somemailclient.com?cmd=%s", "Some Mail Client");screen對象
screen對象基本只用來表明客戶端的能力,其中包括瀏覽器窗口外部的顯示器信息,如像素寬度和高度等。
用處不大
history對象history對象保存著用戶上網的歷史記錄,從窗口被打開的那一刻算起。因為history是window對象的屬性,因此每個瀏覽器窗口,每個標簽頁,乃至每個框架都有自己的history對象與特定的window對象關聯。
出于安全考慮,開發人員無法得知用戶瀏覽器過的URL。不過借由用戶訪問過的頁面列表,同樣可以在不知道實際URL的情況視線后退和前進
使用go()方法可以在用戶的歷史記錄中任意跳轉,可以向前向后,接受一個參數整數值或者字符串。
// 后退一頁 history.go(-1); // 前進一頁 history.go(1); // 前進兩頁 history.go(2); // 傳入字符串會跳轉到歷史記錄中包含該字符串的第一個位置 // 如果沒有包含的記錄,則什么都不做 history.go("wrox.com");
還可以使用兩個簡寫方法代替 back() 和 forward()。這兩個方法模仿瀏覽器的“后退”“前進”按鈕
history還有一個length屬性,保存著歷史記錄的數量。包括所有的歷史記錄,即所有向前和向后的記錄。對于加載到窗口、標簽頁或框架中的第一個頁面而言,hitosty.length等于0
if (history.length == 0) { // 這里應該是用戶打開窗口后的第一個頁面 ... }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/109535.html
摘要:表示應該立即下載腳本,但不應妨礙頁面中的其他操作可選。表示通過屬性指定的代碼的字符集。表示腳本可以延遲到文檔完全被解析和顯示之后再執行。實際上,服務器在傳送文件時使用的類型通常是,但在中設置這個值卻可能導致腳本被忽略。 第1章 JavaScript 簡介 雖然JavaScript和ECMAScript通常被人們用來表達相同的含義,但JavaScript的含義比ECMA-262要多得多...
摘要:本質上是由一組無序名值對組成的。浮點數值的最高精度是位小數,但在進行計算時其精度遠遠不如證書。例如這是使用基于數值的浮點計算的通病,并非獨此一家數值范圍。 函數名不能使用關鍵字(typeof不行但typeOf可以,區分大小寫) 標識符就是指變量、函數、屬性的名字,或者函數的參數。 第一個字符必須是一個字母、下劃線(_)或者一個美元符號($) 其他字符可以是字母、下劃線、美元符號或...
摘要:具體說就是執行流進入下列任何一個語句時,作用域鏈就會得到加長語句的塊。如果局部環境中存在著同名的標識符,就不會使用位于父環境中的標識符訪問局部變量要比訪問全局變量更快,因為不用向上搜索作用域鏈。 基本類型和引用類型的值 ECMAscript變量包含 基本類型值和引用類型值 基本類型值值的是基本數據類型:Undefined, Null, Boolean, Number, String ...
摘要:定義函數表達式的方式有兩種函數聲明。不過,這并不是匿名函數唯一的用途??梢允褂妹瘮当磉_式來達成相同的結果閉包匿名函數和閉包是兩個概念,容易混淆。匿名函數的執行環境具有全局性,因此其對象通常指向通過改變函數的執行環境的情況除外。 定義函數表達式的方式有兩種: 函數聲明。它的重要特征就是 函數聲明提升(function declaration hoisting) 即在執行代碼之前會...
摘要:對的兩個主要拓展是選擇和。以下插入標記的拓展已經納入了規范。在寫模式下,會根據指定的字符串創建新的子樹,然后用這個子樹完全替換調用元素。在刪除帶有時間處理程序或引用了其他對象子樹時,就有可能導致內存占用問題。 盡管DOM作為API已經非常完善了,但為了實現更多功能,仍然會有一些標準或專有的拓展。2008年之前,瀏覽器中幾乎所有的拓展都是專有的,此后W3C著手將一些已經成為事實標準的專...
閱讀 2737·2021-10-09 09:44
閱讀 3550·2019-08-30 15:54
閱讀 2160·2019-08-30 14:16
閱讀 2790·2019-08-30 13:09
閱讀 825·2019-08-30 13:08
閱讀 1280·2019-08-29 16:29
閱讀 1662·2019-08-26 13:57
閱讀 1925·2019-08-26 13:53