本身總結的javascript基礎知識

爲了面試本身寫的概要,參考文獻:《javascript高級程序設計》javascript

一、選擇符API
*querySelector()
querySelector()接收一個css選擇符,返回與選擇符匹配的第一個元素,若是沒有就返回null。
當用document調用它的時候,在全部的document元素中查找,
若是用元素調用這個方法,就會在元素全部後代元素中查找。
若果匹配到不合法的css選擇符,就是報錯。
*querySelectorAll()
querySelector()接收一個css選擇符,與querySelectorAll()同樣,它返回的是一個知足css選擇符的NodeList,
一樣,也能夠用document和元素調用它,若是沒有找到匹配的選擇符,則返回一個空的NodeLIst,若是
css選擇符不合法,則會拋出錯誤。
*matchesSelector()
matchesSelector()方法接收一個css選擇符,它能夠返回調用元素是否與該選擇符匹配,因此
它的返回值是布爾類型,若是能夠匹配則返回true,若果不匹配則返回false。
matchesSelector()通常能夠用來檢查所選元素能不能被querySelector()和querySelectorAll()返回,
但瀏覽器並不能很好的支持matchesSelector,IE9+能夠支持msMatchesSelector(),
Firefox3.6+能夠支持mozMatchesSelector,Chrome支持webkitMatchesSelector(),因此須要本身封裝一個方法:css

function matchesSelector(element,selector){
if(element.matchesSelector){
return element.matchesSelector(selector);
}else if(element.msMatchesSelector){
return element.msMatchesSelector(selector);
}else if(element.mozMatchesSelector){
return element.mozMatchesSelector(selector);
}else if(element.webkitMatchesSelector){
return element.webkitMatchesSelector(selector);
}else{
throw new Error("瀏覽器不支持");
}
}html

二、javaScript中的節點屬性
*節點屬性:
nodeType 每一個節點都有,返回值分別爲1~12的的整數,表明不一樣的節點類型
parentNode 指向每一個節點的父節點,只有一個。
childNodes 返回一個元素的全部子節點。
previousSibling 返回當前節點的上一個兄弟節點,若是當前節點是childNodes中的第一個節點,則返回null。
nextSibling 返回當前節點的下一個兄弟節點,若是當前節點是childNodes中的最後一個節點,則返回null。
*操做節點:
appendChild() 插入節點,而且被插入的節點做爲父節點的最後一個子節點。即被插入節點的nextSibling爲nulll;
insertBefore() 插入節點,可是insertBefore("","")接收兩個參數,第一個參數是被插入的節點,第二個參數是參照節點,
執行完insertBefore後,被插入的節點將會做爲參照的節點的上一個兄弟節點被插入(即previousSibling),
第二個參數也能夠是null,這樣就達到了和appendChild()相同的效果。
replaceChild() 替換節點,replaceChild()接收兩個參數,第一個參數爲要插入的節點,第二個參數爲要替換的節點,
被替換的節點仍然存在於文檔中,但卻失去了在文檔中的位置。
removeChild() 移除節點,removeChild()接收一個參數,就是被移除的節點,該方法的返回值爲被移除的節點。被移除的節點
仍然存在於文檔中,可是卻失去了在文檔中的位置。
*document節點
document存在的屬性:
document.URL 取得當前頁面完整的URL
document.domain 取得當前頁面的域名
document.referrer 取得當前頁面的來源頁面地址,若是沒有返回空字符串前端

三、HTML5中的自定義數據屬性
HTML5中規定爲元素添加非標準的屬性時要加上前綴data-,目的是爲元素提供與渲染無關的信息,或單純是爲了語義信息,能夠隨便添加
只要以data-開頭便可。而後能夠經過dataset來訪問響應的值,而且用dataset取值的時候屬性名沒有了data-前綴,若是屬性爲data-myname
則只須要用 Selector.dataset.myname便可。java

四、HTML5中插入標記的三種方式
*innerHTML
在讀的模式下,innerHTML會返回調用它的元素的全部子節點的HTML代碼。
在寫的模式下,innerHTML接收一段html代碼做爲參數,會根據制定的參數建立新的DOM樹,而後用新的DOM樹替換原來的DOM樹。
*outerHTMl
在讀得模式下,outerHTML會返回包括調用它的元素和全部子節點的所有HTML標記。
在寫的模式下,至關於根據參數建立新的DOM樹,而後替換包括調用該方法在內的DOM樹。
轉換爲代碼就是:
div.outerHTML("<p>this is text</p>");
var p = document.createElement('p');
p.append(document.createTextNode('this is text'));
div.parentNode.replace(p,div);
*insertAdjacentHTML()方法
接收兩個參數,第一個參數是要插入的位置,第二個參數是要插入的元素。
第一個參數爲beforebegin,表示在當前元素前插入一個同輩元素。
第一個參數爲afterbegin,􏰿􏲭􏲄􏰯􏰰􏲟􏱖􏵠􏵐􏰮􏰠􏵎􏰘􏰡􏰯􏰰􏲡􏰿􏱌􏱫􏰮􏰠􏰡􏰯􏰰􏲟􏱫􏸄􏵠􏵐􏵎􏰘􏰡􏰯􏰰􏰿􏲭􏲄􏰯􏰰􏲟􏱖􏵠􏵐􏰮􏰠􏵎􏰘􏰡􏰯􏰰􏲡􏰿􏱌􏱫􏰮􏰠􏰡􏰯􏰰􏲟􏱫􏸄􏵠􏵐􏵎􏰘􏰡􏰯􏰰􏰿􏲭􏲄􏰯􏰰􏲟􏱖􏵠􏵐􏰮􏰠􏵎􏰘􏰡􏰯􏰰􏲡􏰿􏱌􏱫􏰮􏰠􏰡􏰯􏰰􏲟􏱫􏸄􏵠􏵐􏵎􏰘􏰡􏰯􏰰􏰿􏲭􏲄􏰯􏰰􏲟􏱖􏵠􏵐􏰮􏰠􏵎􏰘􏰡􏰯􏰰􏲡􏰿􏱌􏱫􏰮􏰠􏰡􏰯􏰰􏲟􏱫􏸄􏵠􏵐􏵎􏰘􏰡􏰯􏰰􏰿􏲭􏲄􏰯􏰰􏲟􏱖􏵠􏵐􏰮􏰠􏵎􏰘􏰡􏰯􏰰􏲡􏰿􏱌􏱫􏰮􏰠􏰡􏰯􏰰􏲟􏱫􏸄􏵠􏵐􏵎􏰘􏰡􏰯􏰰􏰿􏲭􏲄􏰯􏰰􏲟􏱖􏵠􏵐􏰮􏰠􏵎􏰘􏰡􏰯􏰰􏲡􏰿􏱌􏱫􏰮􏰠􏰡􏰯􏰰􏲟􏱫􏸄􏵠􏵐􏵎􏰘􏰡􏰯􏰰􏰿􏲭􏲄􏰯􏰰􏲟􏱖􏵠􏵐􏰮􏰠􏵎􏰘􏰡􏰯􏰰􏲡􏰿􏱌􏱫􏰮􏰠􏰡􏰯􏰰􏲟􏱫􏸄􏵠􏵐􏵎􏰘􏰡􏰯􏰰表示􏰿􏲭􏲄􏰯􏰰􏲟􏱖􏵠􏵐􏰮􏰠􏵎􏰘􏰡􏰯􏰰􏲡􏰿􏱌􏱫􏰮􏰠􏰡􏰯􏰰􏲟􏱫􏸄􏵠􏵐􏵎􏰘􏰡􏰯􏰰􏰿􏲭􏲄􏰯􏰰􏲟􏱖􏵠􏵐􏰮􏰠􏵎􏰘􏰡􏰯􏰰􏲡􏰿􏱌􏱫􏰮􏰠􏰡􏰯􏰰􏲟􏱫􏸄􏵠􏵐􏵎􏰘􏰡􏰯􏰰􏰿􏲭􏲄􏰯􏰰􏲟􏱖􏵠􏵐􏰮􏰠􏵎􏰘􏰡􏰯􏰰􏲡􏰿􏱌􏱫􏰮􏰠􏰡􏰯􏰰􏲟􏱫􏸄􏵠􏵐􏵎􏰘􏰡􏰯􏰰􏰿􏲭􏲄􏰯􏰰􏲟􏱖􏵠􏵐􏰮􏰠􏵎􏰘􏰡􏰯􏰰􏲡􏰿􏱌􏱫􏰮􏰠􏰡􏰯􏰰􏲟􏱫􏸄􏵠􏵐􏵎􏰘􏰡􏰯􏰰􏰿􏲭􏲄􏰯􏰰􏲟􏱖􏵠􏵐􏰮􏰠􏵎􏰘􏰡􏰯􏰰􏲡􏰿􏱌􏱫􏰮􏰠􏰡􏰯􏰰􏲟􏱫􏸄􏵠􏵐􏵎􏰘􏰡􏰯􏰰􏰿􏲭􏲄􏰯􏰰􏲟􏱖􏵠􏵐􏰮􏰠􏵎􏰘􏰡􏰯􏰰􏲡􏰿􏱌􏱫􏰮􏰠􏰡􏰯􏰰􏲟􏱫􏸄􏵠􏵐􏵎􏰘􏰡􏰯􏰰􏰿􏲭􏲄􏰯􏰰􏲟􏱖􏵠􏵐􏰮􏰠􏵎􏰘􏰡􏰯􏰰􏲡􏰿􏱌􏱫􏰮􏰠􏰡􏰯􏰰􏲟􏱫􏸄􏵠􏵐􏵎􏰘􏰡􏰯􏰰􏰿􏲭􏲄􏰯􏰰􏲟􏱖􏵠􏵐􏰮􏰠􏵎􏰘􏰡􏰯􏰰􏲡􏰿􏱌􏱫􏰮􏰠􏰡􏰯􏰰􏲟􏱫􏸄􏵠􏵐􏵎􏰘􏰡􏰯􏰰在當前元素之下插入一個新的子元素或者在第一個子元素以前在插入一個新的子元素。
第一個參數爲beforeend,表示在當前元素之下插入一個新的子元素或者在最後一個子元素以後再插入一個新的子元素。
第一個參數誒afterend,表示在當前元素以後插入一個緊鄰的同輩元素。
五、DOM中的計算樣式:
*DOM2中的計算樣式:
加強了document.defaultView.getComputedStyle("","") 傳入兩個參數,第一個參數傳入的要計算樣式的元素,第二個參數是一個僞元素
字符串,若是不須要得到僞元素的信息能夠傳入null;最終調用的形式爲 var style = document.defaultView.getComputedStyle(div,null);最終採用
這樣的形式取出計算後的樣式。style.backgroundColor,style.width,style.height。
在IE中沒有getComputedStyle屬性,IE中用currentStyle返回類型跟getComputedStyle同樣,調用形式爲 myDiv.currentStyle。node

*cssDOM中的偏移量offset
offsetWiidth 元素在水平方向上佔用的空間的大小,包括元素的寬度,元素的可見的垂直滾動條的寬度,左右邊框的寬度。
offHeight 元素在垂直方向上佔用空間的大小,包括元素的高度,元素中在水平方向上得滾動條的寬度,上下邊框的寬度。
offsetTop 元素上外邊框到包含元素的上內邊框之間的距離。
offsetLeft 元素左外邊框到包含元素的左內邊框之間的距離。
offsetParent 所指的是元素的外包含元素。
通用的取得元素相對於文檔偏移的函數:
function getElementLeft(element){
var left = element.offsetLeft;
var current = element.offsetParent;
while(current !== null){
left += current.offsetLeft;
current = current.offsetParent;
}
return left;
}jquery

*客戶區的大小
clientWidth:
元素內容的寬度加上左右內邊距的寬度。
clientHeight:
元素內容的高度加上上下內邊距的高度
*元素的滾動的大小
scrollHeight 表示在沒有滾動條的狀況下,元素內容區的總高度。
scrollWidth 表示在沒有滾動條的狀況下,元素內容區的總寬度。
scrollTop 表示因爲滾動條的存在,元素上方被隱藏的像素數。能夠用它來改變滾動條的位置。
scrollLeft 表示因爲滾動條的存在,元素左側被隱藏的像素數。能夠用它開改變滾動條的位置。
例如,返回頂部的按鈕的例子。
function scrollToTop(element){
if(element.scrollTop != 0){
element.scrollTop = 0;
}
}
*肯定元素的大小
getBoundingClientRect()方法看不太懂,mark下。 css3

========================================================================
js中的事件總結:
一、事件捕獲和事件冒泡web

二、DOM2級事件處理程序
添加事件:addEventListener()
刪除事件:removeEventListener()
它們都接受三個參數,第一個參數爲事件類型,第二個參數爲事件觸發的函數,第三個參數是一個布爾類型。ture表示在捕獲階段
調用事件處理程序,false表示在冒泡階段調用事件處理程序。
要爲一個按鈕添加事件的例子:
btn.addEventListener("click",function(){alert("btn")},false);
值得注意的是,經過addEventListener()添加的事件只能用removeEventListener()刪除,並且保證它們所傳入的參數
必須一致才能刪除,全部要知足這個規則的話,就有一個問題,就是傳入匿名函數的事件將不會被刪除。
IE中的事件處理程序:
添加事件:attachEvent()
刪除事件:detachEvent()
它們都接受兩個參數,第一個參數接受事件類型,這裏與addEventListener()不用的是事件類型爲基礎的事件類型,
即事件類型全是on開頭的事件類型,第二個參數接收觸發的執行函數。該方法所有采用事件冒泡的方式來調用
事件。值得注意的一點是,attachEvent()執行環境是全局的執行環境,因此在attachEvent()中this的值是window。
3 、計算鼠標位置的事件
clientX:返回鼠標相對於瀏覽器視口的橫座標。
clientY:返回鼠標相對於瀏覽器視口的縱座標。
pageX:鼠標相對於頁面的橫座標。
pageY:鼠標相對於頁面的縱座標。
screenX:鼠標相對於屏幕的橫座標。
screenY:鼠標相對於屏幕的縱座標。
四、鼠標滾輪滾動的事件
mousewheel事件,鼠標滾輪滾動時觸發,存在一個wheelDelta屬性,根據方向分正負,都是120的倍數,因此可根據wheelDelta屬性
來判斷鼠標滾動的方向。
五、移動端的觸摸與手勢事件
touchstart() 當手指觸摸屏幕時觸發。
touchend() 當手指從屏幕上移開時觸發。
touchmove() 當手指在屏幕上連續滑動的時候觸發。
touchcancel() 當系統中止跟蹤觸摸的時候觸發。
將NodeList轉換爲數組
var array = Array.prototype.slice.call(NodeList,0);
將arguments對象轉換爲數組
var array = Array.prototype.slice.call(arguments,0);
==========================================================
一、js中字符串的操做方法
charAt()能夠傳入一個索引,返回字符串在該索引處的字符,能夠簡化,直接用[]中括號里加索引值就能達到相同的效果。
concat() 能夠將字符串和字符串鏈接起來。
slice() 和substring() 能夠傳入一個或兩個參數,傳入一個參數時返回第一個索引到字符串尾部的子字符串。傳入
第二個參數時返回第一個到第二個索引之間的子字符串。
substr() 傳入一個參數時和上邊做用同樣,傳入第二個參數的時候返回從第一個索引到第二個參數個數的子字符串。
indexOf()和lastIndexOf()返回給定字符在字符串中的索引,indexOf從頭開始,lastIndexOf從字符串的尾部開始。
二、js中數組的操做方法
join() 方法接收一個參數,將數組轉換成字符串並以傳入的參數進行分割。
push() 方法接收參數,將參數放入數組的結尾,並返回修改後數組的長度。
pop() 方法從數組的末尾移除一項,並將移除的項返回。
shift() 方法移除數組的第一項並返回該項。
unshift() 方法以第一項的添加給數組,並返回修改後數組的長度。
數組中很是強大的方法:
splice() 提供兩個參數的時候,是刪除,即第一個參數是要刪除的起始項,和要刪除的項數。
splice() 若是三個參數,第二個參數爲0時,即要刪除的項數爲0,第一個參數爲起始項,能夠有第三個,四個或更多的參數,表示從
死一個參數項起,插入後面該項,此時第二個參數爲0。
若是第二個參數不爲0,就是替換功能,即先從起始項刪除相應長度的項,再插入後面傳入參數的各個項。
三、HTTP超文本傳輸協議
分爲4個過程:
創建鏈接
發送請求
發送響應
關閉鏈接
四、js中的閉包:
閉包在javascript高級程序設計一書中被解釋爲是指有權訪問另外一個函數做用域中變量的函數,簡單解釋能夠分爲兩種,在函數中
做爲返回值,做爲參數傳遞。
關於做用域:在javascript中沒有塊級做用域,並且在javascript中只有函數能夠聲明一個做用域,並且做用域是在函數聲明的時候
就建立的。
關於執行下文:執行上下文是真實存在的,javascript程序在剛執行的時候會自動進入全局環境的執行上下文,在執行上下文中定義
事先聲明的變量。而後每調用一個函數,就會在該函數的做用域中建立該函數的上下文執行環境,在函數的做用域中爲函數中本身
的變量賦值。當函數執行完畢後,會銷燬函數的執行上下文環境。
再次關於閉包:由於閉包是函數中引用另外一個函數做用域中變量的函數,因此在調用完外層函數的時候,按常理本應該銷燬該函數的
上下文執行環境的,可是由於在函數中還存在一個引用該函數做用域中的變量的函數,全部若是該函數的上下文執行環境被銷燬的話
那麼引用該函數做用域的值得那個函數將取不到值,因此該函數的上下文執行環境將不會被銷燬,這樣當調用引用該函數做用域中的
變量的那個函數時,它們兩個的上下文執行環境都在內存中,這就是閉包,閉包會增長開銷。
五、js中ajax的應用:
首先在javascript中使用ajax的步驟:
一、建立XMLHttpRequest對象
var xhr = new XMLHttpRequest();
二、用open()函數創建與服務器的鏈接:
xhr.open("GET","url",true);
三、用send()函數像服務器發送請求
xhr.send(null);
四、處理結果
處理結果採用xhr的onreadystatechange事件來監聽xhr.readyState屬性,當屬性爲4的時候,表示請求發送成功,
而且有返回的數據。能夠根據數據進行對頁面的操做。
注意:在發送post的時候,須要同時發送一個去請求頭。才能正確使用post的一部請求。
xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");
六、js中的this對象
先總結一句話,this永遠指向調用該函數的對象。
============================================================
七、javascript中的對象和其餘面向對象的語言有什麼差異?
通常傳統的面嚮對象語言都有類的概念,經過類能夠建立任意多個具備相同屬性和方法的對象,二javascript中卻沒有類的概念,
ECMAscript中把對象定義爲無序屬性的集合,其屬性能夠包含基本值,對象或函數。換句話說,對象是一組沒有特定順序的值,
對象的每個屬性和方法都有一個特定的名字,而每一個名字都映射到一個值。
八、web語義化的做用:
爲了在沒有css的狀況下,網頁也能呈現很好的內容結構,代碼結構。
加強了用戶體驗,title,alt,label標籤的活用
有利於SEO,和搜索引擎創建良好的溝通,有利於爬蟲抓取更多的有效的信息。
便於團隊的開發和維護,語義化更具備可讀性。
九、IE6的浮動雙邊距bug:
在IE6中,若是爲一個元素設置了浮動之後,同時又爲元素設置了左右邊距,那麼在IE6中會產生比實際大的邊距。
解決方案是爲浮動的元素加上_display:inline;
十、css解決IE中的兼容性問題:
採用漸進識別的方式來解決IE中的問題。
在末尾加上\9能夠分離出IE678。
而後再在前面加上+能夠分離出IE67。
而後再在前面加上_能夠分離出IE6。
例如:
.bb{
background:#ffeedd;全部識別
background:#445566\9; IE678能夠識別
+background:#222222; IE67能夠識別
_background:#667788; IE6能夠識別
}
十一、萬能的清除浮動的方法:
clearfix:after{
content:'.';
height:0;
visibility:hidden;
display:block;
clear:both;
}
十二、js中的new操做符幹了什麼?
建立了一個空對象,並將this變量引用該對象,同時還繼承了該函數的原型。面試

=============================================

一、js中的BOM對象:(瀏覽器對象模型)
*window對象:
window對象在ECMAscript中扮演着global對象,定義在window中的對象會自動被加入到global對象當中去,可是這兩個對象仍是
有一點的小差異,就是定義在window上的對象能夠被delete操做符刪除,直接定義在global中的對象不能被delete操做符刪除。
*window對象的location對象:
window對象中的location對象是很是經常使用的。location對象經常使用的屬性有幾個:
host:返回服務器名稱和端口號
hostname:返回不帶端口號的服務器名稱
href:返回當前頁面完整的URL,location的toString()方法返回相同的值。
pathname:返回URL下的目錄名或文件名
port:返回URL中指定的端口號
search:返回URl中的查詢字符串(以?開頭地址欄的參數字符串)
注意:重要的解析查詢字符串的方法
該方法主要分爲如下的步驟:
一、去掉開頭的問號。
二、以&爲符號用split將字符串分割成數組(如今數組的每一個元素都是name=value的形式);
三、創建將要返回的保存查詢字符串的對象。
四、而後用for循環遍歷,再用「=」分割,取數組中第1位和第2位保存值。
五、將值裝入到所要返回的對象中去。
function getQueryStringArgs(){
var qStr = (location.search.length > 0 ? qStr.substring(1) : " ");//去掉開頭的?
var arg = {};
items = (qStr.length > 0 ? qStr.split("&") : []);
item = null;
name = null;
value = null;
for(var i = 0; i < items.length; i++){
item = items[i].split("=");
name = item[0];
value = item[1];
if(name.length){

arg[name]= value;
}
}
return arg;
}
*window對象中的navigator對象:
onLine檢測瀏覽器是否鏈接了互聯網。
*用navigator對象檢測瀏覽器的插件
用數組,window.navigator.plugins獲取插件的數組。數組裏能夠訪問插件的name,和decription屬性。
IE中不支持上述方法,IE中用ActiveXObject檢測插件。
*window對象中的history對象:
history對象中的最基本的方法就是go()方法:
go()方法能夠接收一個數字做爲參數,數字能夠是正數(正數表示向前進),也能夠是負數(負數表示向後退),
例如,window.history.go(1)//表示向前進一頁。
window.history.go(-1)//表示向後推一頁
go()方法也能夠接收字符串做爲參數,接收字符串的意義就是跳到地址包含那個字符串的最近的記錄的位置。
history比較經常使用的方法是back()和forward()方法,顧名思義,back()方法就是向後退一頁,forward()方法就是向前進一頁。
二、js中的事件對象
js在處理事件時,都會生成一個event事件對象。event對象中保留着不少常常用得屬性和方法:
preventDefault() 取消事件的默認行爲
stopPropagation 取消事件的冒泡行爲
target 只讀的屬性,指向事件的目標,由冒泡引發的事件會指向最早引發事件的元素。
若是不冒泡則指向當前綁定事件的元素。與currentTarget和this所指的對象相同。
三、jquery中的模擬事件
$().focus();
$().click();
四、js中的引用類型
Object
Array
Date
RegExp
Function
特殊的引用類型:
Boolean
Number
其中Number中經常使用的幾個方法
toString() 參數傳幾就是轉換爲幾進制的數輸出來
toFixed() 參數傳幾,就是以存在幾位小數點的浮點數輸出來
js 中的基本類型
Undefined􏳛
Null
􏳛Boolean
􏳛Number
String
五、js中對數組的迭代
感受能用的着的:
every()
判斷數組中的每個元素是否知足特定的條件,若是所有爲true才返回true,不然返回false。
filter()
過濾數組中知足特定條件的數,返回知足的數組。
map()
對數組中每個元素執行特定的方法,返回執行後的結果數組
forEach()
不返回任何值,至關於for
some()
與every正好相反,判斷每個元素是否知足特定的條件,若是有一個僞true就返回true。
它們的用法爲:
var numbers = [1,2,3,4,5,6,7];
var result = numbers.filter(function(item,index,array){
return (item > 2);
});
alert(result);// [2,3,4,5,6,7]
六、兼容瀏覽器的bind綁定事件方法
function bind(element,eventType,callback){
if(typeof el.addEventListener === 'function'){
el.addEventListener(eventType,callback,false);
}else if(typeof el.attachEvent ==='function'){
el.attachEvent('on' + eventType,callback);
}
}
}

七、js中原型鏈是什麼?
訪問一個對象的屬性時,如今基本屬性中找,若是沒有,再沿着_proto_這條鏈向上找,這就是原型鏈
八、js中的做用域鏈
js中的做用域鏈的定義:當代碼在執行環境中執行的時候,就會建立一個做用域鏈。用途是保證對執行環境有權訪問的全部變量和函數的
有序訪問。
做用域鏈的最前端都是當前執行代碼所在環境的變量
九、延長做用域鏈
try-catch語句中的catch語句
with語句
這兩個語句都會將做用域鏈的前端添加一個對象,對於with語句,with語句會將指定的對象添加到做用域中,
對於catch語句,會建立一個新的變量對象,其中包含的是被拋出的錯誤對象的聲明。
十、解析JSON
JSON.stringify() 將json對象解析成字符串
JSON.parse() 將字符串轉化爲js對象
eval也能夠實現相同將json解析爲js對象的功能,可是說不安全,因此不多用。
十一、js中什麼是原型?
建立的每個函數,都有一個原型屬性,該屬性指向一個原型對象,這個原型對象中包含着該類對象全部共享的屬性和方法。
這就是原型。
十二、函數中的callee
使用方法:arguments.callee 指向擁有該arguments的函數
1三、apply()和call()
在特定的做用域中調用函數。
call()和apply()真正的用武之地在於能夠擴充函數賴以運行的做用域,其最大的好處就是對象與方法之間再也不有任何的耦合關係。
bind()方法會建立一個函數的實例,其this的值會被綁定到bind()的參數中去。
1四、http狀態碼爲304,表示請求的資源並無被修改,能夠直接使用瀏覽器緩存的版本。
503,表示服務器接收到請求,但沒有處理。多是服務器過載或維護。
403,禁止訪問。
1五、js跨域問題:
*CORS
使用CORS(跨域資源共享) 實現跨域,背後的思想就是使用自定義的http請求頭部與服務器進行溝通,從而決定請求是成功仍是
失敗。
*JSONP
JSON withing padding,本質上是被包含在函數中調用json。(回調函數的名字,通常是在請求中指定的)
通常分爲兩個部分,
實際用法是:
動態的建立script元素,使用時爲<script>元素添加一個src屬性,這裏能夠指明一個跨域的URL。
JSONP簡單易用,優勢是能夠訪問響應到的文本,支持瀏覽器和服務器之間的雙向通訊。
*經過修改document.domain來跨子域
用來解決同一個頁面中不一樣iframe中的跨域問題,能夠取到iframe的window屬性,可是取不到window如下的屬性,方法是
修改兩個頁面的document.domain等於上一級父級域名。
*使用window.name

*圖像Ping 原理是一個網頁能夠從任何網頁加載圖像,不用考慮跨域仍是不跨域。經過圖像Ping的方式,瀏覽器得不到任何的數據, 而能夠根據load和error的方法肯定服務器是否接收到了響應。 圖像Ping只能用於瀏覽器與服務器之間的單向通訊。 *Comet 簡稱爲服務器推送,若是AJAX是瀏覽器向服務器請求數據的方式,則Comet是服務器向瀏覽器推送數據的方式。 Comet的方式分爲長輪詢和流的方式。 長輪詢: 瀏覽器發起一個到服務器的請求,服務器一直保持鏈接打開,知道有數據可發送時就向瀏覽器發送 數據,瀏覽器接收完數據並關閉鏈接。隨後瀏覽器又發起了一個請求,這一過程持續不斷。 http流:瀏覽器只和服務器創建一次http鏈接,而後鏈接一直打開,由服務器週期性的向瀏覽器發送數據, 客戶端須要比較接收到的數據,分辨出哪些事新數據。1六、docType位於文檔的最前面,告知瀏覽器以何種模式來渲染文檔。 在混雜模式中,頁面以寬鬆的向後兼容的方式顯示。模擬老式瀏覽器的行爲以防止站點沒法工做。1七、js延遲加載的方式 *動態建立腳本 var script = document.createElement("script"); script.type = "text/javascript"; script.src = "client.js"; document.body.appendChild(script); *使用defer <script type ="" src="" defer="defer"></script> *使用async <script type="" async src=""></script>1八、一句話實現單詞首字母大寫的方法,除了用css3中的text-transform:capitalize;1九、js中實現繼承的方式 一、借用原型鏈繼承 二、借用構造函數繼承 三、組合式繼承 四、原型式繼承 五、寄生式繼承 六、寄生組合式繼承20、js中建立對象的方式 一、工廠模式 二、構造函數模式 三、原型模式

相關文章
相關標籤/搜索