對於 if 語句括號裡的表達式,ECMAScript 會自動呼叫 Boolean()轉型函數將這個表達式的結果轉換成一個布林值。如果值為 true,執行後面的語句,否則不執行。
透過arguments 物件的length屬性,來智慧的判斷有多少參數,然後把參數進行合理的應用 。
例如,要實現一個加法運算,將所有傳進來的數字累加,而數字的個數又不確定。
function box() {var sum = 0;if (arguments.length == 0) return sum; //如果没有参数,退出for(var i = 0;i < arguments.length; i++) { //如果有,就累加sum = sum + arguments[i]; }return sum; //返回累加结果 } alert(box(5,9,12));
function box(num) {if (num <= 1) {return 1; } else {return num * arguments.callee(num-1);//使用 callee 来执行自身 } }
直接接收 event 對象,是 W3C 的做法,IE 不支持,IE 自己定義了一個 event 對象,直接在 window.event 取得即可。
input.onclick = function (evt) {var e = evt || window.event; //实现跨浏览器兼容获取 event 对象 alert(e); };
W3C 中的 target 和 IE 中的 srcElement,都表示事件的目標。
function getTarget(evt) {var e = evt || window.event;return e.target || e.srcElement; //兼容得到事件目标 DOM 对象} document.onclick = function (evt) {var target = getTarget(evt); alert(target); };
在阻止冒泡的過程中,W3C 和 IE 所採用的不同的方法,那麼我們必須做一下相容。
function stopPro(evt) {var e = evt || window.event; window.event ? e.cancelBubble = true : e.stopPropagation(); }
function preDef(evt) {var e = evt || window.event;if (e.preventDefault) { e.preventDefault(); } else { e.returnValue = false; } }
當我們右鍵點選網頁的時候,會自動出現 windows 所附的選單。那我們可以使用 contextmenu 事件來修改我們指定的選單,但前提是把右鍵的預設行為取消掉。
function addEvent(obj, type, fn) { //添加事件兼容if (obj.addEventListener) { obj.addEventListener(type, fn); } else if (obj.attachEvent) { obj.attachEvent('on' + type, fn); } }function removeEvent(obj, type, fn) { //移除事件兼容if (obj.removeEventListener) { ob j.removeEventListener(type, fn); } else if (obj.detachEvent) { obj.detachEvent('on' + type, fn); } } addEvent(window, 'load', function () {var text = document.getElementById('text'); addEvent(text, 'contextmenu', function (evt) {var e = evt || window.event; preDef(e);var menu = document.getElementById('menu'); menu.style.left = e.clientX + 'px'; menu.style.top = e.clientY + 'px'; menu.style.visibility = 'visible'; addEvent(document, 'click', function () { document.getElementById('myMenu').style.visibility = 'hidden'; }); }); });
IE對盒模型的渲染在Standards Mode和Quirks Mode是有很大差別的,在Standards Mode下對於盒模型的解釋和其他的標準瀏覽器是一樣,但在Quirks Mode模式下則有很大差別,而在不宣告Doctype的情況下,IE預設又是Quirks Mode。所以為相容性考慮,我們可能需要取得目前的文檔渲染方式。
document.compatMode剛好派上用場,它有兩個可能的回傳值:BackCompat和CSS1Compat。
BackCompat:標準相容模式關閉。瀏覽器客戶區寬度是document.body.clientWidth;
CSS1Compat:標準相容模式開啟。 瀏覽器客戶區寬度是document.documentElement.clientWidth。
例如:
function getViewport(){ if (document.compatMode == "BackCompat"){ return { width: document.body.clientWidth, height: document.body.clientHeight } } else { return { width: document.documentElement.clientWidth, height: document.documentElement.clientHeight } } }
function getStyle(element, attr) {if (typeof window.getComputedStyle != 'undefined') {//W3Creturn window.getComputedStyle(element, null)[attr]; } else if (typeof element.currentStyle != 'undeinfed') {//IEreturn element.currentStyle[attr]; } }
標準瀏覽器支援 insertRule, IE低版則支援 addRule。
//跨浏览器获取视口大小function getInner() {if (typeof window.innerWidth != 'undefined') { //IE8及以下undefinedreturn { width : window.innerWidth, height : window.innerHeight } } else {return { width : document.documentElement.clientWidth, height : document.documentElement.clientHeight } } }
以上是web前端的知識分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!