你們好,我是魔王哪吒,話很少說,今天帶來的是一篇《長篇總結之JavaScript,鞏固前端基礎》文章,歡迎你們喜歡。
複製代碼
JavaScript是一種基於對象和事件驅動的客戶端腳本語言,最初是爲了檢驗HTML表單輸入的正確性,起源於Netscape公司的LiveScript語言。javascript
liveScript ==> javaScript => ECMAscript
css
關係是:liveScript
是javaScript
的一個曾用名,ECMAscript
: 定義了javascript
的語法規範,描述了語言的基本語法和數據類型。前端
JavaScript
是由ECMAScript
語言,Browser Objects(DOM,BOM)
組成。java
//
單行註解node
/**/
多行註解web
語句結束使用分號,若是省略,則由接下肯定語句的結尾。正則表達式
ECMAScript中的一切是區分大小寫的,如變量,函數名,操做符。chrome
什麼是標識符,變量,函數,屬性的名稱,或者是函數的參數。express
什麼是變量,ECMAScript的變量是鬆散類型的。鬆散類型是指能夠用來保存任何類型的數據。數組
每一個變量僅僅只是用於保存值的佔位符而已。
變量的聲明:變量的聲明使用var操做符,語法:var變量名。
一次聲明多個變量,用逗號隔開。
注意,省略var聲明的變量是全局變量,不推薦省略var操做符來定義全局變量。
ECMAScript中分:簡單數據類型和複雜數據類型。
簡單數據類型也稱爲基本數據類型,注意,在ES6中新增了symbol數據類型。
基本數據類型5種:
undefined, null, boolean, number, string
複雜數據類型分:object
typeof是用來檢測變量的類型。
語法結構,typeof 變量
或者是typeof(變量)
返回值,是string類型,或者是number,boolean,object,function,undefined
等。
undefined
類型只有一個值,便是特殊的undefined
。
說明:通常而言,不存在須要顯式地把一個變量設置爲undefined
值的狀況。
null
值表示一個空對象指針;若是定義的變量準備在未來用於保存對象,那麼最好將變量初始化爲null而不是其餘值。
undefined
值是派生自null
值的,因此undefined==null
的返回結果爲true
。
number
知識點number
:表示整數和浮點數。
NaN
是(not a number
)是一個特殊的數值,表示非數字。
任何涉及
NaN
的操做,都會返回NaN
。
NaN
與任何值都不相等,包括NaN
自己。
isNaN
知識點isNaN(n)
表示檢測n
是否爲「非數值」。返回結果爲boolean
。
說明:isNaN()
對接收的數值,先嚐試轉換爲數值,再檢測是否爲非數值。
Number()
parseInt()
parseFloat()
Number()
能夠用於任何數據類型,parseInt()
和parseFloat()
用於把字符串轉成數值。
parseInt()
是會忽略字符串前面的空格,直至找到第一個非空格字符。
parseInt()
轉換空字符串返回NaN
。
parseInt()
這個函數提供第二個參數,轉換時使用的基數。
parseFloat()
從第一個字符開始解析每一個字符,直至碰見一個無效的浮點數字符爲止。
除了第一個小數點有效外,
parseFloat()
與parseInt()
的第二個區別在於它始終都會忽略前導的零。
String
類型用於表示由零或多個16位Unicode
字符組成的字符序列。
String()
toString()
str.toString()
將str
轉換爲字符串。使用String()
函數,可以將任何類型的值轉換爲字符串。
用於表示真假的類型,便是true
表示真,false
表示假。
除了0以外的全部數字,轉換爲布爾型都爲true。
除了「 」以外的全部字符,轉換爲布爾型都爲true。
null
和undefined
轉換爲布爾型爲false
。
表達式是將同類型的數據,用運算符號按必定的規則鏈接起來的,有意義的式子。
操做符的分類
++a
與a++
都對a
進行遞增的操做。
區別:
++a
先返回遞增以後的a
的值,a++
先返回a
的原值,再返回遞增以後的值。
遞減同理。
語法:條件?執行代碼1:執行代碼2
&&
若是第一個操做數隱式類型轉換後爲true
,那麼返回第一個操做數。
若是第一個操做數隱式類型轉換後爲false
,那麼返回第二個操做數。
若是,只有有一個操做數爲null,NaN,undefined
,其中一個,就會返回null,NaN,undefined
。
||
或,只要有一個條件成立,返回true
!
非,不管操做數是什麼數據類型,邏輯非都會返回一個布爾值。
alert()
,彈出警告對話框
if
語句
if(condition){
statement1;
}else{
statement2;
}
複製代碼
語法:prompt()
彈出輸入框,有肯定和取消。
var age = prompt("請輸入您的年齡")
複製代碼
NaN
和任何內容都不相等,包括它自己
語法:new Date().getDay()
獲取星期,返回值,number(0-6)
var week = new Date().getDay();
console.log(week);
複製代碼
多條件可使用switch
語句
語法:
switch(expression) {
case value: statement
break;
case value: statement
break;
...
defalut: statement
}
複製代碼
向瀏覽器輸出內容:document.write("內容")
for
for-in
while
do...while
語法:
while(條件){
執行的代碼;
}
複製代碼
語法:
do{
須要執行的代碼
}while(條件)
複製代碼
循環至少要被執行一次。
break
當即退出循環
continue
結束本次循環,繼續開始下一次循環
函數的做用就是經過函數能夠封裝任意多條語句,能夠在任何地方,任什麼時候候調用執行。
函數是如何定義的,使用function
聲明。
函數名屬於標識符。
<script>
// 聲明一個函數
function myFun(){
alert("我是一個函數");
}
// 函數的調用
myFun();
</script>
複製代碼
聲明一個帶有參數的函數:
function add(num1,num2){
var sum = sum1+sum2;
return sum;
}
console.log(add(2,3));
複製代碼
函數會在執行完return
語句以後中止並當即退出,return
語句也能夠不帶有任何返回值,用於提早中止函數執行又不須要返回值的狀況。
掌握
arguments
在ECMAScript
中的參數在內部用一個數組來表示,在函數體內經過arguments
對象來訪問這個數組參數。
對象:字符串,函數,數組
內置對象就是瀏覽器本身封裝好的對象。
Array
String
Math
Date
數組是用來存儲一組數據的,如何建立數組,數組元素的讀和寫,數組的length
屬性。
建立數組:使用Array
構造函數,new Array()
,使用字面量表示法。
push()
,把參數添加到數組的最後。unshift()
,把參數添加到數組的前面。pop()
,刪除最後一個元素,返回被刪除的那個元素。shift()
刪除第一個元素,返回被刪除的那個元素。join
方法,語法:arrayObject.join(separator)
,功能是用於把數組中的全部元素放入一個字符串,返回的值是字符串。
reverse()
方法,語法:arrayObject.reverse()
,功能是用於顛倒數組中元素的順序,返回值爲數組。
sort()
方法,語法:arrayObject.sort(sortby)
,功能是用於對數組的元素進行排序,返回值爲數組。-按照字符串比較的。
代碼:
arr.sort(function(a,b){return b-a});
複製代碼
concat()
方法,是用於鏈接兩個或者多個數組,返回值爲數組。
arr3 = arr1.concat(arr2);
複製代碼
slice()
截取,從已有的數組中返回選定的元素。
語法:arrayObject.slice(start,end)
splice()
方法-刪除-插入-替換刪除,語法:arrayObject.splice(index,count)
,功能:刪除從index
處開始的零個或多個元素。返回值爲含有被刪除的元素的數組。
若是count
爲0,不刪除任何值,若是count
不設置,刪除從index
開始的全部值。
插入,語法:arrayObject.splice(index,0,item1,...itemx)
,功能爲在指定位置插入值。
替換:語法:arrayObject.splice(index,count,itemq,...itemx)
,功能,在指定位置插入值,同時刪除任意數量的項。
index
爲起始位置,count
爲要刪除的項數,item1...itemx
爲要插入的項。
indexOf()
,語法,arrayObject.indexOf(searchvalue,startIndex)
,功能,從數組的開頭(位置爲0)開始向後查找。
返回值爲number
,沒有找到的話就是返回-1
,查找到返回在數組中的位置。
lastIndexOf()
,語法:arrayObject.lastIndexOf(searchvalue,startIndex)
,功能是從數組的末尾開始向前查找。
String
字符串的方法:
charAt()
charCodeAt()
indexOf()
lastIndexOf()
charAt()
與charCodeAt()
的區別
語法:stringObject.charAt(index)
,功能返回stringObject
中的index
位置的字符。
語法:stringObject.charCodeAt(index)
,功能返回stringObject
中的index
位置字符的字符編碼。
字符串對象的截取:
slice()
substring()
substr()
數組對象也有slice()
的語法
對於字符串的截取:
語法:stringObject.slice(start,end)
功能,截取子字符串。
參數說明:
start
爲指定字符串的開始位置。end
爲表示字符串到哪裏結束,end
自己不在截取範圍以內。substring()
substring()
語法,主要區別是這個當參數爲負數時,自動轉換爲0。
substring()
會將小的數看成開始位置,把較大的數看成結束位置。
substr()
,語法:stringObject.substr(start, len)
功能是截取字符串。
start
爲指定字符串開始的位置,len
爲表示截取的字符總數,省略時截取到字符串的末尾。
當start
爲負數時,會將傳入的負值與字符串的長度相加。而len
爲負值時,返回字符串。
代碼:
字符串長度爲11
str.substring(6,9);
str.substr(6,3);
str.substr(-5,4); // (6,4)
str.substr(3,-4);
複製代碼
var url="http://xxx/index.txt";
function getFileFormat(url) {
var pos = url.lastIndexOf(".");
return url.substr(pos); // .txt
}
var formatName = getFileFormat(url);
複製代碼
split()
語法:stringObject.split(separator)
。
功能,把一個字符串分割成字符串數組。返回值爲array
。
separator
爲分隔符。
replace()
替換語法:stringObject.replace(regexp/substr,replacement)
功能:在字符串中用一些字符替換另外一些字符,或替換一個與正則表達式匹配的子串。返回值爲String
。
語法:stringObject.toUpperCase()
,把字符串轉換爲大寫。
語法:stringObject.toLowerCase()
,把字符串轉換爲小寫。
str.charAt(6).toUpperCase();
複製代碼
將每個單詞的首字母轉換爲大寫,鏈接剩餘的字符
var newStr = word.charAt(0).toUpperCase()+word.substr(1);
複製代碼
min()
max()
ceil()
,向上取整。floor()
,向下取整。round()
abs()
取整,ceil()
,floor()
Math.ceil()
語法:Math.ceil(num)
,功能爲向上取整,即返回大於num
的最小整數。
Math.floor(num)
,向下取整,返回num
的整數部分。
Math.round()
語法,功能是將數值四捨五入爲最接近的整數。
Math.abs()
功能是返回num
的絕對值,語法:Math.abs(num)
,返回值爲Number
。
random()
方法-隨機數封裝一個求n到m之間的隨機整數的函數。
random=Math.floor(Math.random()*(m-n+1)+n);
Math.random()
語法,是返回大於等於0小於1的隨機數。
new Date()
爲建立一個日期時間對象。不傳參,返回當前的日期時間對象。
getFullYear()
返回4位數的年份。getMonth()
返回日期中的月份,返回值爲0-11。getDate()
返回月份中的天數。getDay()
返回星期,返回值爲0-6。getHours()
返回小時。getMinutes()
返回分。getSeconds()
返回秒。getTime()
返回表示日期的毫秒數。代碼:
var today = new Date(),
year = today.getFullYear(),
month = today.getMonth()+1,
date = today.getDate(),
week = today.getDay(), // 0-6
hours = today.getHours(),
minutes = today.getMinutes(),
seconds = today.getSeconds(),
複製代碼
setFullYear(year)
設置4位數。setMonth(mon)
設置日期中的月份。setDate()
設置日期。setHours()
設置小時。setMinutes()
設置分。setSeconds()
設置秒。setTime()
以毫秒數設置日期,會改變整個日期。Chrome DevTools
的基本使用語法錯誤:不符合js語法的錯誤。
運行時錯誤,代碼沒有語法錯誤,可是在運行時發生錯誤。
什麼是邏輯錯誤?就是指計算結果很想象的不同。
代碼:
function foo() {
try {
throw new Error();
}catch(e){
return 1;
}finally{
return 2;
}
}
複製代碼
DOM操做,添加節點,刪除節點,修改節點,查找節點。
DOM document(文檔) object(對象) model(模型)
document.write()
建立節點
create
建立方法:
document.createElement()
document.createTextNode()
document.createDocumentFragment()
document.createComment()
代碼create
建立節點:
myReady(function(){
var ul = document.getElementById("myList");
var li = document.createElement("li");
ul.appendChild(li);
});
<ul id="myList"></ul>
複製代碼
建立節點的高效方法:
outerText
,innerText
innerHTML
,outerHTML
documentElement
屬性可返回文檔的根節點
tagName
屬性返回元素的標籤名
類數組對象NodeList
類數組對象HTMLCollection
Ele.getElementsByTagName()
document.scripts
document.links
document.images
document.forms
tr.cells
select.options
示例:
myReady(function(){
var scripts = document.scripts;
var links = document.links;
var cells = document.getElementById("tr").cells;
var imgs = document.images;
var forms = document.forms;
var options = document.getElementById("select").options;
var ps = document.getElementsByTagName("p");
}
複製代碼
類數組對象
NamedNodeMap
Ele.attributes
類數組對象的動態性
三個集合NodeList
,HTMLCollection
,NamedNodeMap
都是動態的。
節點查找
getElementById()
getElementByName()
getElementByTagName()
getElementByClassName()
querySelector()
querySelectorAll()
document.getElementById()
document.getElementsByClassName()
document.getElementsByTagName()
document.getElementsByName()
僞數組
獲取元素屬性
ele.setAttribute("屬性名","屬性值")
ele.getAttribute("屬性名")
ele.removeAttribute("屬性名")
ele.dataset.prop="值"
複製代碼
dom.style.prop
window.getComputeStyle(ele,null)
ele.currentStyle
ele.id ele.title
獲取元素的內容
innerHTML:
innerText:
value:
使用於表單
offset
系列屬性
滾動條滾動的距離:
window.pageYOffset(ie9如下不支持)
document.body.scrollTop
document.documentElement.scrollTop;
複製代碼
可視窗口尺寸:
window.innerWidth(IE8如下不兼容)
document.documentElement.clientWidth
document.body.clientWidth(怪異模式)
判斷怪異模型的方法
document.compatMode
複製代碼
滾動到指定位置
scroll(x,y) scrollTo(x,y) scrollBy(x,y);
複製代碼
querySelector()
和querySelectorAll()
querySelector()
返回指定css
選擇器的一個元素
querySelectorAll()
返回指定css
選擇器的一組元素
appendChild()
insertBefore()
replaceChild()
cloneNode()
normalize()
splitText()
appendChild()
爲指定元素節點的最後一個子節點以後添加節點,該方法返回新的子節點。
insertBefore()
在指定的已有子節點以前插入新的子節點。
replaceChild()
該方法用於新節點替換某個子節點。返回被替換的節點。
cloneNode()
建立節點的拷貝,並返回該副本。
var myUrl = document.getElementById("myUrl");
var newNode = myUrl.cloneNode(true); // 深度,有其子節點,默認爲false,只有父節點
複製代碼
normalize()
可以合併相鄰的Text
節點。
代碼:
myReady(function(){
var div = document.createElement("div");
var textNode = document.createTextNode("dom");
div.appendChild(textNode);
var textNode2 = document.createTextNode("web");
div.appendChild(textNode2);
document.body.appendChild(div);
console.log(div.childNodes.length);
div.normalize();
console.log(div.childNode);
console.log(div.firstChild.nodeValue);
}
複製代碼
splitText()
按照指定的位置把文本節點分割爲兩個節點。
removeChild()
removeNode()
innerHTML
deleteContents()
textContent
removeChild()
刪除某個節點中指定的子節點。
removeChild()
必須有參數
myReady(function(){
var myUrl = document.getElementById("myUrl");
console.log(myUrl.childNodes.length);
var secondChild = myUrl.removeChild(myUrl.childNode[1]);
console.log(secondChild);
console.log(myUrl.childNodes.length);
}
複製代碼
removeNode()
ie
的私有實現false
removeChild()
和innerHTML
比較
HTML DOM removeChild()
方法
var list=document.getElementById("myList");
list.removeChild(list.childNodes[0]);
複製代碼
移除前:
Coffee
Tea
Milk
複製代碼
移除後:
Tea
Milk
複製代碼
瀏覽器支持 Internet ExplorerFirefoxOperaGoogle ChromeSafari
全部主要瀏覽器都支持 removeChild
方法
語法node.removeChild(node)
建立節點,查找節點,操做節點,刪除節點
示例:
<div
id="div0"
class="active"
style=""
url=""
xxx=""></div>
複製代碼
屬性分:property
固有屬性和attribute
自定義屬性
getNamedItem()
removeNamedItem()
setNamedItem()
示例:
myReady(function(){
var inputs = document.querySelectorAll("input」);
inputs[0].checked = true;
}
<input type="checkbox">1
<input type="checkbox" checked="checked">2
<input type="checkbox" checked>3
複製代碼
性別:
男 女
示例:
性別:<br/>
<input type="radio" name="gender" value="male" checked>男
<input type="radio" name="gender" value="female">女
複製代碼
你去過的城市:
示例:
你去過的城市:<br/>
<select name="city" id="city">
<option value="北京">北京</option>
<option value="上海">上海</option>
</select>
複製代碼
你去過的城市:
示例:
你去過的城市:<br/>
<select name="city" id="city" multiple="multiple">
<option value="北京">北京</option>
<option value="上海" selected>上海</option>
<option value="紐約">紐約</option>
</select>
複製代碼
前端
示例:
<p style="text-align:center" title="前端">前端</p>
複製代碼
什麼是事件?是文檔或瀏覽器窗口發生的一些交互瞬間。
事件方法:
onload
頁面加載時觸發onclick
鼠標點擊時觸發onmouseover
鼠標滑過期觸發onmouseout
鼠標離開時觸發onfoucs
獲取焦點時觸發onblur
失去焦點時觸發onchange
域的內容改變時發生HTML事件
示例:
<input type="button" value="彈出" onclick='alert("我是按鈕")'>
複製代碼
綁定事件的方法:
1.onclick:
this
指向dom
元素自己2.obj.addEventListener(type,fn,false);
IE9
如下不兼容this
指向dom
元素自己3.obj.attchEvent("on"+type,fn);
IE
獨有this
指向window
onsubmit
表單中的確認按鈕被點擊時發生onmousedown
鼠標按鈕在元素上按下時觸發onmousemove
在鼠標指針移動時發生onmouseup
在元素上鬆開鼠標按鈕時觸發onresize
當調整瀏覽器窗口的大小時觸發onscroll
拖動滾動條滾動時觸發keyCode
屬性onkeydown
在用戶按下一個鍵盤按鍵時發生
onkeypress
在按下鍵盤按鍵時發生
onkeyup
在鍵盤按鍵被鬆開時發生
keyCode
返回onkeypress
,onkeydown
或onkeyup
事件觸發的鍵的值的字符代碼,或鍵的代碼。
當用戶與web頁面進行某些交互時,解釋器就會建立響應的event
對象以描述事件信息。
事件句柄,稱事件處理函數,事件監聽函數,指用於響應某個事件而調用的函數。
移除事件,removeEventListener()
語法:element.removeEventListener(event,function,useCapture)
,功能,移除addEventListener()
方法添加的事件句柄。
示例:
var btn2 = document.getElementById("btn2");
btn2.addEventListener('click',function(){
alert('btn2');
},false);
// 事件解綁
btn2.removeEventListener('click',function(){
alert('btn2');
});
複製代碼
事件解綁成功的主要緣由在保存addxx和removexx裏面的參數相同。
ie
事件流(ie
事件處理程序)
添加事件:attachEvent()
語法:element.attachEvent(event,function)
功能是用於向指定元素添加事件句柄
移除事件
detachEvent()
語法:element.detachEvent(event,function)
功能是移除attachEvent()
方法添加的事件句柄。
事件週期:事件捕獲(事件對象沿dom
樹向下傳播),目標觸發(運行事件監聽函數),事件冒泡(事件沿着dom
樹向上傳播)。
示例:
// 事件冒泡
document.getElementById('parent').addEventListener("click",function(e){
alert("parent事件被觸發"+this.id);
})
document.getElementById("child").addEventListener("click",ffunction(e){
alert("child事件被觸發"+this.id);
})
複製代碼
事件委託的原理就是事件冒泡
event
對象屬性與方法
type
事件的類型,srcElement/target
事件源,就是發生事件的元素。
阻止默認行爲
var link = document.getElementById("mylink");
link.onClick = function(event){
event.preventDefault();
}
複製代碼
取消事件捕獲或者冒泡
var btn = document.getElementById("myBtn");
btn.onclick=function(event){
alert("Click");
event.stopPropagation();
}
document.body.onclick = function(event){
alert("Body clicked");
}
複製代碼
target
點擊誰誰就是target
,事件源
currentTarget
事件綁定在誰身上,就指向誰
clientY
就是指瀏覽器頂部底邊到鼠標的位置
pageY
就是指瀏覽器頂部底邊到鼠標的位置
screenY
就是指屏幕頂部到鼠標位置
srcElement/target
事件源,就是發生事件的元素。cancelBubble
布爾屬性,設置爲true
時,將中止事件進一步起泡到包容層次的元素。returnValue
布爾屬性,設置爲false
時能夠組織瀏覽器執行默認的事件動做。示例:
var EventUtil = {
addHandler: function(element, type, handler) {
},
getTarget: function(event){
return event.target || event.srcElement;
},
preventDefault: function(event){
if(event.preventDefault){
event.preventDefault();
}else{
event.returnValue = false;
},
removeHandler: function(element,type,handler){
},
stopPropagation: function(event){
if(event.stopPropagation){
event.stopPropagation();
}else{
event.cancelBubble = true;
}
}
}
}
複製代碼
Event addEventListener attacEvent
示例:
var EventUtil = {
addHandler: function(element,type,handler){
},
removeHandler: function(element,type,handler){
}
}
複製代碼
什麼是bom
Bom
瀏覽器對象模型。
Window
對象表示瀏覽器中打開的窗口。
若是文檔包含框架(<frame> 或 <iframe> 標籤)
,瀏覽器會爲 HTML
文檔建立一個 window
對象,併爲每一個框架建立一個額外的 window
對象。
全局變量
window
聲明和關鍵字聲明
window.變量名=值
和var 變量名=值
window
對象的方法
語法:window.alert("content")
語法:window.confirm("message")
Window | 對象屬性 |
---|---|
屬性 | 描述 |
closed | 返回窗口是否已被關閉。 |
defaultStatus | 設置或返回窗口狀態欄中的默認文本。 |
document | 對 Document 對象的只讀引用 |
frames | 返回窗口中全部命名的框架。該集合是 Window 對象的數組,每一個 Window 對象在窗口中含有一個框架。 |
history | 對 History 對象的只讀引用。 |
innerHeight | 返回窗口的文檔顯示區的高度。 |
innerWidth | 返回窗口的文檔顯示區的寬度。 |
localStorage | 在瀏覽器中存儲 key/value 對。沒有過時時間。 |
length | 設置或返回窗口中的框架數量。 |
location | 用於窗口或框架的 Location 對象。請參閱 Location 對象。 |
name | 設置或返回窗口的名稱。 |
navigator | 對 Navigator 對象的只讀引用 |
超時調用,間歇調用
語法:setTimeout(code,millisec)
語法:setInterval(code,millisec)
示例:
var intervalId = setInterval(function(){
console.log("web");
},1000);
setTimeout(function(){
clearInterval(intervalId);
},10000);
複製代碼
函數能夠訪問由函數內部定義的變量,如:
實例
function myFunction() {
var a = 1;
return a * a;
}
複製代碼
函數也能夠訪問函數外部定義的變量,如:
實例
var a = 1;
function myFunction() {
return a * a;
}
複製代碼
location
對象提供了與當前窗口中加載的文檔有關的信息,還提供了一些導航的功能,它既是window
對象的屬性,也是document
對象的屬性。
location.href
返回當前加載頁面的完整的url。
location.host
返回服務器名稱和端口號。
location.hostname
返回不帶端口號的服務器名稱。
location.pathname
返回url
中的目錄和文件名。
location.port
返回url
中指定的端口號,若是沒有,返回空字符串。
location.protocol
返回頁面使用的協議。
location.search
返回url
的查詢字符串。
改變瀏覽器位置的方法:
location.href
屬性。
location
對象其餘屬性也是能夠改變url
location.hash
和location.search
location.replace()
是從新定向url
location.reload()
從新加載當前顯示的頁面
history
對象保存了用戶在瀏覽器中訪問頁面的歷史記錄
history.back()
回到歷史記錄的上一步
示例:
var btn = document.getElementById("btn");
// 點擊btn按鈕時回到歷史記錄的上一步
btn.onclick = function(){
//history.back();
history.go(-1);
}
複製代碼
history.forward()
歷史記錄的下一步
history.go(-n)
回到歷史記錄的前n步
history.go(n)
回到歷史記錄的後n步
screen
對象屬性
screen.availWidth
返回可用的屏幕寬度
screen.availHeight
返回可用的屏幕高度
獲取窗口文檔顯示區的高度和寬度,可使用innerHeight
和innerWidth
navigator
對象
示例:
// 檢測瀏覽器類型
function getBrowser(){
// 獲取userAgent屬性
var explorer = navigator.userAgent.toLowerCase(),browser;
if(explorer.indexOf("mise")>-1){
browser = "IE";
}else if(explorer.indexOf("chrome")>-1){
browser = "chrome";
}else if(explorer.indexOf("opera")>-1){
browser = "opera";
}else if(explorer.indexOf("safari")>-1){
browser = "safari"
}
return browser;
}
複製代碼
什麼是執行上下文環境?
console.log(a); // undefined
console.log(this); //window
b(); // b() is not a function
c(); // "c"
var a = "a";
var b = function () {
var b = "b"
console.log(b);
}
function c () {
var c = "c"
console.log(c);
}
複製代碼
上下文棧就是一個存儲執行上下文的棧,棧中只有一個上下文是處於活動狀態的,執行全局代碼時就會有一個全局上下文被壓入棧,調用一個函數時就會產生一個函數的上下文環境,而後將其壓入棧
js的做用域是詞法做用域(靜態做用域),實際上大部分的語言做用域都是詞法做用域,與詞法做用域相對的是動態做用域
閉包是指有權訪問另外一個函數做用域中變量的函數。
做用域鏈指向的變量對象
造成閉包即要把一個函數當成值傳遞,該函數還引用另外一個函數的做用域鏈使得被引用的函數不能被回收
優勢:
掃碼關注公衆號,訂閱更多精彩內容。