var a = [1, 2, 5]; for(var k in a){ console.log(k); // k 爲當前元素的下標 } for(var m of a){ console.log(m); // m 爲當前元素的值 } VM215:3 0 VM215:3 1 VM215:3 2 VM215:6 1 VM215:6 2 VM215:6 5
var
聲明一個變量,可賦一個初始值。let
聲明一個塊做用域的局部變量,可賦一個初始值。const
聲明一個塊做用域的只讀命名的常量。必須以字母、下劃線(_)或者美圓符號($)開頭,而且區分大小寫
。undefined
ReferenceError
錯誤undefined
時,布爾值環境當作false
null
時,布爾值環境當作false
代碼:javascript
// ES5 var a = 'web'; window.a; // 'web' // ES6 let b = 'web'; window.b; // undefined
代碼:php
// 單行註釋 /* 多行註釋 */
代碼:css
// ES5及以前 console.log(a); // undefined var a = 1; console.log(a); // 1 // ES6開始 console.log(b); // Uncaught ReferenceError: b1 is not defined let b = 2; console.log(b); // 2
代碼:html
// 函數聲明 f(); // 'web' function(){ console.log('web'); };
// 函數表達式 g(); // Uncaught TypeError: g is not a function var g = function(){ // 換成 let 聲明也同樣 console.log('web'); }
javascript
實現由3個部分組成:核心ECMAScript
,文檔對象模型DOM
,瀏覽器對象模型BOM
。JavaScript
是一種直譯式腳本語言,是一種動態類型,弱類型,基於原型的語言,內置支持類型。JavaScript
具備特色:一種解釋性腳本語言,主要用於向HTML頁面添加交互行爲,能夠直接嵌入HTML頁面,但寫成單獨的js文件有利於結構和行爲的分離,JavaScript
語法區別:區分大小寫,變量是弱類型,結尾的分號無關緊要,解釋與java,c和php
語言中的註解是相同的,大括號表示代碼塊。
示例
{}
包含的內容表示一個代碼塊
代碼:java
if(test1=="red") { test1 = "blue"; alert(test1); }
JavaScript
關鍵字:node
break,else,new,var case,finally,return,void catch,for,switch,while continue,function,this,with default,if,throw delete,in,try do,instanceof,typeof
JavaScript
的變量在javascript
中,變量是存儲信息的容器,變量存在兩種類型的值,即爲原始值和引用值。es6
JavaScript
的原始類型,即Undefined
,Null
,Boolean
,Number
和String
型。String
是JavaScript
的基本數據類型。JavaScript
語言的每一個值都屬於某一種數據類型。JavaScript
的數據類型分兩類:值類型(原始值),引用數據類型(引用值)。JavaScript
提供typeof
運算符用於判斷一個值是否在某種類型的範圍內。Undefined
類型只有一個值,即爲undefined
。undefined
。Null
類型只有一個值爲null
,值undefined
其實是從值null
派生來的,因此JavaScript
將他們定義爲相等的。null
與undefined
表示這兩個值相等,但含義不一樣。undefined
是聲明瞭變量但未對其初始化時賦予該變量的值,null
表示還沒有存在的對象。代碼:web
console.log( null == undefined); // true
Boolean
類型的兩個值是true
和false
。Number
類型,全部數學運算返回的都是十進制的結果。Number.MAX_VVALUE
和Number.MIN_VALUE
,它們定義了Number
值集合的外邊界。Number.MAX_VALUE
時,將被賦予值Number.POSITIVE_INFINITY
,表示再也不有Number
值。生成的數值小於Number.MIN_VALUE
,會被賦予值Number.NEGATIVE_INFINITY
,表示再也不有Number
值。Infinity
。Number.POSITIVE_INFINITY
的值爲Infinity
,Number.NEGATIVE_INFINITY
的值爲-Infinity
。
使用
isFinite()
方法判斷參數值是不是有窮的。
NaN
,表示非數。與無窮大同樣,NaN
也不能用於算術計算。注意,NaN
與自身不相等。示例:正則表達式
console.log(NaN == NaN) // false console.log(isNaN("66")); // false
String
類型,是惟一沒有固定大小的原始類型,字符串字面量是用雙引號或者單引號聲明。typeof
操做符,用於獲取一個變量或者表達式的類型。返回值:數組
undefined,變量是Undefined類型 boolean,變量是Boolean類型的 number,變量是Number類型的 string,變量是String類型的 object,變量是一種引用類型或者Null類型
示例:
console.log(typeof 12); // number
typeof
運算符對null
的值返回Object
。
instanceof
操做符,用於判斷一個引用類型屬於哪一種類型。示例:
<script> var a = new Array(); if(a instanceof Array) { console.log('a是一個數組類型'); }else{ console.log('a不是一個數組類型'); } </script>
Number
變量,將變量轉化爲數字類型。String
變量,將變量轉化爲字符串類型。Boolean
變量,將變量轉化爲布爾值類型。parseFloat
變量,將變量轉化爲浮點類型。parseInt
變量,將變量轉化爲整數類型。名稱 | 操做符 | 含義 |
---|---|---|
賦值 | x = y | x = y |
加法賦值 | x += y |
x = x + y |
減法賦值 | x -= y |
x = x - y |
乘法賦值 | x *= y |
x = x * y |
除法賦值 | x /= y |
x = x / y |
求餘賦值 | x %= y |
x = x % y |
求冪賦值 | x **= y |
x = x ** y |
左移位賦值 | x <<= y |
x = x << y |
右移位賦值 | x >>= y |
x = x >> y |
無符號右移位賦值 | x >>>= y |
x = x >>> y |
按位與賦值 | x &= y |
x = x & y |
按位異或賦值 | x ^= y |
x = x ^ y |
示例:
賦值運算符的符號爲= 算數運算符:+,-,*,/,% 比較運算符:>,>=,<,<=,!=,==,===,!== 邏輯運算符: &&,邏輯與,表示表達式先後全爲true才能返回true ||,邏輯或,表示表達式先後只要有一個true就返回true !,邏輯取反,表示表達式後若爲true,則返回false,不然反之。
++
自增加,每執行一次自身加1,--
自減,每執行一次自身減1.i++
,值先參與外部表達式的運算,而後再將自身的值加1。++i
,i先自身的值加1,再參與外部表達式的運算。+=
,a+=3
等於a=a+3
。同理相似。if-else
條件判斷語句switch-case
選擇語句for
循環語句for-in
遍歷語句while
循環語句do-while
循環語句示例:
if(條件 1) { 當條件1爲true時執行的代碼 }else if(條件 2){ 當條件2爲true時執行的代碼 }else{ 當條件1和條件2都不爲true時執行的代碼 }
示例:
switch(n){ case1: 執行代碼塊1 break; case2: 執行代碼塊2 break; default: ... }
示例:
for(語句1;語句2;語句3){ 被執行的代碼塊 }
continue
表示爲越過本次循環,繼續下一次循環break
表示跳出整個循環,循環結束for in
語句循環遍歷對象的屬性,多用於對象,數組等複合類型,以遍歷其中的屬性和方法。示例:
for(鍵 in 對象) { 代碼塊 }
while
,只有表達式爲真,就能夠進入循環。示例:
while(表達式){ 代碼塊 }
do-while
示例:
do { 代碼 }while(表達式)
數組的屬性和方法:
方法 | 說明 |
---|---|
concat() |
鏈接兩個或者更多的數組,並返回結果 |
join() |
把數組的全部元素放入一個字符串,元素經過指定的分隔符進行分隔 |
pop() |
刪除並返回數組的最後一個元素 |
push() |
向數組的末尾添加一個或者多個元素,並返回新的長度 |
reverse() |
顛倒數組中元素的順序 |
shift() |
刪除並返回數組的第一個元素 |
slice() |
從某個已有的數組返回選定的元素 |
sort() |
對數組的元素進行排序 |
splice() |
刪除元素,並向數組添加新元素 |
toSource() |
返回該對象的源代碼 |
toString() |
將數組轉換爲字符串,並返回結果 |
toLocalString() |
將數組轉換爲本地數組,並返回結果 |
unshift() |
向數組的開頭添加一個或者更多元素,並返回新的長度 |
valueOf() |
返回數組對象的原始值 |
indexOf() |
在數組中搜索指定元素並返回第一個匹配的索引 |
lastIndexOf() |
在數組中搜索指定元素並返回最後一個匹配的索引 |
concat()
鏈接兩個或更多的數組,並返回一個新數組。
語法:
arr.concat(a1, a2, ..., an)
參數:
arr
:目標數組a1,a2,...,an
:須要合併的元素
join()
使用指定分隔符,鏈接兩個或多個數組的元素,返回一個字符串。
new
關鍵字建立一個array
對象,能夠在內存中建立一個數組空間,添加元素。new
關鍵字建立一個array
對象的同時爲數組賦予n個初始值。new
,直接用[]
聲明一個數組,能夠直接賦予初始值。pop
方法,從尾部刪除,刪除後元素從數組上剝離並返回。shift
方法,從頭部刪除元素,並返回。splice
方法,從指定位置刪除指定的元素。unshift
方法,從頭部插入。splice
方法,從指定位置插入指定個數的元素。concat
方法將多個數組鏈接成一個數組。join
方法將數組中的元素合併成一個用指定分隔符合並起來的字符串。reverse
方法能夠將數組中的元素倒序排列,並且直接改變原來的數組,不會建立新的數組。sort
方法能夠將數組中的元素按照必定的規則自動排序(默認的是按照字符的ASCII碼順序排序)。pop()和push()
shift()和unshift()
示例:
let arr = [1, 2, 3, 5, 6]; let a1 = arr.slice(2); // [3, 5, 6] let a2 = arr.slice(2,3); // [3] let arr = [1, 2, 3, 4]; let a = arr.splice(1, 2, "web", "a"); // a => [2, 3] // arr => [1, "web", "a", 4]
代碼:
let a = [1,3,5,7]; a.forEach(function(val, index, arr){ arr[index] = val * 2 }) a ; // [2, 6, 10, 14]
代碼:
arr.every(callback) 測試數組的全部元素是否都經過了指定函數的測試。 some() 測試數組中的某些元素是否經過由提供的函數實現的測試。
示例:
let a = [1, "", "aa", 2, 6]; let res = a.filter(function(val, index, arr){ return typeof val == "number"; }) res;//[1, 2, 6]
對每一個元素執行此方法,並返回一個執行後的數組。
示例:
let a = [1, 3, 5]; let b = a.map(function(val, index, arr){ return val + 1; }) b; //[2, 4, 6]
拓展運算符使用(...)
示例:
console.log(...[1, 2, 3]); // 1 2 3 console.log(1, ...[2,3], 4); // 1 2 3 4
// 一般狀況 淺拷貝 let a1 = [1, 2]; let a2 = a1; a2[0] = 3; console.log(a1,a2); // [3,2] [3,2] // 拓展運算符 深拷貝 let a1 = [1, 2]; let a2 = [...a1]; // let [...a2] = a1; // 做用相同 a2[0] = 3; console.log(a1,a2); // [1,2] [3,2]
let [a, ...b] = [1, 2, 3, 4]; // a => 1 b => [2,3,4] let [a, ...b] = []; // a => undefined b => [] let [a, ...b] = ["abc"]; // a => "abc" b => []
new Array(3).fill('a'); // ['a','a','a'] [1,2,3].fill('a'); // ['a','a','a'] [1,2,3].fill('a',1,2);// [1, "a", 3]
entries()
對鍵值對遍歷keys()
對鍵名遍歷values()
對鍵值遍歷。includes()
用於表示數組是否包含給定的值代碼:
[1,2,3].includes(3,3); // false [1,2,3].includes(3,4); // false [1,2,3].includes(3,-1); // true [1,2,3].includes(3,-4); // true
示例:
var arr1 = [1, 2, [3, 4]]; arr1.flat(); // [1, 2, 3, 4] var arr2 = [1, 2, [3, 4, [5, 6]]]; arr2.flat(); // [1, 2, 3, 4, [5, 6]] var arr3 = [1, 2, [3, 4, [5, 6]]]; arr3.flat(2); // [1, 2, 3, 4, 5, 6]
var arr4 = [1, 2, , 4, 5]; arr4.flat(); // [1, 2, 4, 5]
語法
var new_array = arr.flatMap(function callback(currentValue[, index[, array]]) { // return element for new_array }[, thisArg])
var arr1 = [1, 2, 3, 4]; arr1.map(x => [x * 2]); // [[2], [4], [6], [8]] arr1.flatMap(x => [x * 2]); // [2, 4, 6, 8] // only one level is flattened arr1.flatMap(x => [[x * 2]]); // [[2], [4], [6], [8]]
let arr1 = ["it's Sunny in", "", "California"]; arr1.map(x => x.split(" ")); // [["it's","Sunny","in"],[""],["California"]] arr1.flatMap(x => x.split(" ")); // ["it's","Sunny","in", "", "California"]
reduce()
方法對數組中的每一個元素執行一個由您提供的reducer函數(升序執行),將其結果彙總爲單個返回值。
var sum = [0, 1, 2, 3].reduce(function (accumulator, currentValue) { return accumulator + currentValue; }, 0); // 和爲 6 var total = [ 0, 1, 2, 3 ].reduce( ( acc, cur ) => acc + cur, 0 );
語法
arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue]) initialValue可選 做爲第一次調用 callback函數時的第一個參數的值。 若是沒有提供初始值,則將使用數組中的第一個元素。 在沒有初始值的空數組上調用 reduce 將報錯。
字符串對象屬性
屬性 | 說明 |
---|---|
constructor |
對建立該對象的函數的引用 |
length |
字符串的長度 |
prototype |
容許向對象添加屬性和方法 |
字符串對象方法
屬性 | 說明 |
---|---|
anchor() |
建立HTML錨 |
big() |
用大號字體顯示字符串 |
blink() |
顯示閃動字符串 |
bold() |
使用粗體顯示字符串 |
charAt() |
返回在指定位置的字符 |
charCodeAt() |
返回在指定位置的字符的Unicode編碼 |
concat() |
鏈接字符串 |
fixed() |
以打字機文本顯示字符串 |
fontcolor() |
使用指定的顏色顯示字符串 |
fontsize() |
使用指定的尺寸顯示字符串 |
fromCharCode() |
從字符編碼建立一個字符串 |
indexOf() |
檢查字符串 |
italics() |
使用斜體顯示字符串 |
lastIndexOf() |
從後向前搜索字符串 |
link() |
將字符串顯示爲連接 |
localeCompare() |
用本地特定的順序比較兩個字符串 |
match() |
找到一個或者多個正則表達式的匹配 |
replace() |
替換與正則表達式匹配的子串 |
search() |
檢索與正則表達式匹配的值 |
slice() |
提取字符串的片斷,並在新的字符串中返回被提取的部分 |
small() |
使用小字號顯示字符串 |
split() |
將字符串分割爲字符串數組 |
strike() |
使用刪除線顯示字符串 |
sub() |
將字符串顯示爲下標 |
substr() |
從起始索引號提取字符串中指定數目的字符 |
substring() |
提取字符串中兩個指定的索引號之間的字符 |
sup() |
將字符串顯示爲上標 |
toLocaleLowerCase() |
將字符串轉換爲小寫 |
toLocaleUpperCase() |
將字符串轉換爲大寫 |
toLowerCase() |
將字符串轉換爲小寫 |
toUpperCase() |
將字符串轉換爲大寫 |
toString() |
返回字符串 |
valueOf() |
返回某個字符串對象的原始值 |
toSource() |
表明對象的源代碼 |
indexOf()
,lastIndexOf()
,search()
和match()
。
indexOf()
,indexOf(搜索詞,起始索引位置)
,第2個參數不寫則默認從0開始搜索。indexOf()
用於檢索指定的字符串值在字符串中首次出現的位置。lastIndexOf()
,lastIndexOf(搜索詞,起始索引位置)
,從後向前檢索,返回的是一個指定的子字符串值最後出現的位置。search()
,語法爲字符串,search(搜索詞)
或者字符串search(正則表達式)
。match()
,語法爲字符串。match()
可在字符串內檢索指定的值,或者找到一個或者多個正則表達式的匹配。沒有匹配到結果,就返回null
。有匹配到,會返回一個數組,數組的第0個元素存放的是匹配文本。3種字符串截取方法:substring()
,slice()
,substr()
substring()
,語法爲字符串,substring(截取開始位置,截取結束位置)
,substring()
是經常使用的字符串截取方法,接收兩個參數,不能爲負值,將返回一個新的字符串。slice()
,語法爲字符串,slice(截取開始位置,截取結束位置)
,slice()
中的參數能夠爲負值,若是參數是負值,則該參數從字符串的尾部開始算起的位置。-1
是指字符串的最後一個字符。substr()
,substr(截取開始位置,length)
,在字符串中抽取從截取開始位置下標開始的指定數目的字符。返回一個字符串若是截取的開始位置爲負數,則表示從字符串尾部開始算起。字符串替換
replace()
,replace(正則表達式/要被替換的字符串,要替換成爲的子字符串)
。
字符串切割
split()
用於將一個字符串分割成字符串數組,語法爲字符串。split(用於分割的子字符串,返回數組的最大長度)
,返回數組的最大長度通常狀況下不設置。
事件流:
事件的處理過程主要有三個階段:捕獲階段,目標階段,冒泡階段
事件流包含三個階段:事件捕獲階段,處於目標階段和事件冒泡階段。
事件冒泡和事件捕獲
DOM
事件流:DOM
結構是一個樹形結構,當一個HTML元素產生一個事件時,該事件會在元素節點與根節點之間按特定的順序傳播,路徑所通過的節點都會收到該事件。事件觸發方式
代碼:
addEventListener("click","doSomething","true")
第三個參數爲true,表示採用事件捕獲,若false,表示採用事件冒泡。
<!DOCTYPE html> <html lang="en> <head> <meta charset="UTF-8"> <title>Document</title> <style> html,body{ width:100%; height:100%; } </style> <script> window.onload=function(){ d1 = document.getElementById("d1"); d2 = document.getElementById("d2"); d3 = document.getElementById("d3"); // true 表示在捕獲階段響應 // false 表示在冒泡階段響應 d1.addEventListener("click",function(event){ console.log("d1") },"true"); d2.addEventListener("click",function(event){ console.log("d2") },"true") d3.addEventListener("click",function(event){ console.log("d3") },"true") } </script> </head> <body> <div id="d1" style="background: #0000ff; width: 500px; height: 500px"> <div id="d2" style="background: #00ff00; width: 400px; height: 400px"> <div id="d3" style="background: #ff0000; width: 200px; height: 200px"> </div> </div> </div> </body> </html>
addEventListener網頁,點擊跳轉:addEventListener.html
一個響應事件委託到另外一個元素。
<ul id="btn"> <li id="btn1">按鈕1</li> <li id="btn2">按鈕2</li> <li id="btn3">按鈕3</li> </ul> var btn1 = document.getElementById('btn1'); var btn2 = document.getElementById('btn2'); var btn3 = document.getElementById('btn3'); webbtn.myAddFun(btn1, 'click', function(event){ alert('1點擊'); }); webbtn.myAddFun(btn2, 'click', function(event){ alert('2點擊'); }); webbtn.myAddFun(btn3, 'click', function(event){ alert('3點擊'); });
添加一個事件處理函數,來作事件委託
var btn = document.getElementById('btn'); webbtn.myAddFun(btn, 'click', function(event){ event = webbtn.getMyEvent(event); var target = webbtn.getMyTarget(event); switch(target.id){ case "btn1": alert('1點擊'); break; case "btn2": alert('2點擊'); break; case "btn3": alert('3點擊'); break; } });
鍵盤事件就是有關鍵盤操做所觸發的世界。
鍵盤事件:
方法 | 說明 |
---|---|
keydown |
當用戶按下鍵盤上的任意鍵時觸發。按住不放,會重複觸發 |
keypress |
當用戶按下鍵盤上的字符鍵時觸發。按住不放,會重複觸發 |
keyup |
當用戶釋放鍵盤上的鍵時觸發 |
鼠標綁定onmousedown()
,onmousemove()
,onmouseup()
事件。
mouse網頁,點擊跳轉:mouse.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>mouse</title> <style> html,body{ width: 100%; height: 100%; } #dd { width: 120px; height: 120px; background: #00ff00; position: absolute; } </style> <script> var dd; var mflag = false; function ondown() { dd = document.getElementById('dd'); mflag = true; } function onmove(e){ if(mflag) { dd.style.left = e.clientX - 60 + "px"; dd.style.top = e.clientY - 60 + "px"; } } function onup() { mflag = false; } </script> </head> <body onmousemove="onmove(event)"> <div id="dd" onmousedown="ondown()" onmouseup="onup()" style="left: 80px;top: 120px;" </body> </html>
鼠標事件:
方法 | 說明 |
---|---|
click |
用戶單擊鼠標左鍵或者按下Enter 鍵觸發 |
dbclick |
用戶雙擊鼠標觸發 |
mousedown |
在用戶按下任意鼠標按鈕時觸發 |
mouseenter |
在鼠標光標從元素外部首次移動到元素範圍內時觸發,不冒泡 |
mouseleave |
元素上方的光標移動到元素範圍以外時觸發,不冒泡 |
mousemove |
光標在元素的內部不斷移動時觸發 |
mouseover |
用戶指針位於一個元素外部,而後用戶將首次移動到另外一個元素邊界以內時觸發 |
mouseout |
用戶將光標從一個元素上方移動到另外一個元素時觸發 |
mouseup |
在用戶釋放鼠標時觸發 |
mousewheel |
滾輪滾動時觸發 |
示例:
function web(e) { mouseX = e.clientX; mouseY = e.clientY; console.log("x:"+mouseX + "," + "y:"+mouseY) } <body onclick="web(event)">
onmouseover
onmouseout
窗口事件:
load
unload
abort
error
select
resize
scroll
load
事件,表示當頁面徹底加載完以後,就會觸發window
上面的load
事件。包含全部的圖像,js文件,css文件等外部資源。
示例:
window.onload=function(){}
當頁面徹底加載完以後執行其中的函數。
示例:
<script> window.onload = function() { var mydiv = document.getElementById("mydiv"); console.log(mydiv.innerText); } </script> <body> <div id="mydiv"></div> </body>
示例:
function imgLoad() { myimg = document.getElementById("myimg"); // 圖片加載完成後,給圖片加載框 myimg.style.border = "9px solid $00ff00"; } <img id="myimg src="" onload="imgLoad()">
resize事件
resize
事件。示例:
document.body.clientWidth
和document.body.clientHeight
得到窗口的寬和高。
html,body { width: 100%; height: 100%; } <script> function winChange() { winWidth = document.body.clientWidth; winHeight = document.body.clientHeight; } </script> <body onresize="winChange()"> </body>
scrol
事件,文檔或者瀏覽器窗口被滾動時觸發scroll
事件
示例:
<script> function scrollChange() { srpos = document.getElementById("srpos"); srpos.innerText = document.documentElement.scrollTop; srpos.style.top = docuemnt.documentElement.scrollTop+"px"; } </script> <body onscroll="scrollChange()"> <div style="height:300%;"> <br/> <font id="srpos" style="position: relative;top: 0px">滾動條滾動到0px</font> </div> </body>
焦點事件
方法 | 說明 |
---|---|
blur |
在元素失去焦點時觸發,全部瀏覽器都支持 |
focus |
在元素得到焦點時觸發,全部瀏覽器都支持 |
示例:
<script> var note; function myfocus(fname,notename) { note = document.getElementById(notename); note.innerText = fname+'得到焦點'; } function myblur(fname,notename) { note = document.getElementById(notename); note.innerText = fname + '失去焦點'; } </script> <body> <form name="myform"> <input type="text" name="uname" onfocus="myfocus('uname','unote')" onblur="myblur('uname','unote')"/><font id="unote"></font> <br/> <input type="text" name="pwd" onfocus="myfocus('pwd','pnot')" onblur="myblur('pwd','pnote')"/><font id="pnote"></font> </form> </body>
事件方法
方法 | 說明 |
---|---|
onabort |
圖像加載被中斷 |
onblur |
元素失去焦點 |
onchange |
用戶改變域的內容 |
onclick |
鼠標單擊某個對象 |
ondblclick |
鼠標雙擊某個對象 |
onerror |
當加載文檔或圖像時發生某個錯誤 |
onfocus |
元素得到焦點 |
onkeydown |
某個鍵盤的鍵被按下 |
onkeypress |
某個鍵盤的鍵被按下或者按住 |
onkeyup |
某個鍵盤的鍵被鬆開 |
onload |
某個頁面或者圖像被完成加載 |
onmousedown |
某個鼠標按鍵被按下 |
onmousemove |
鼠標被移動 |
onmouseout |
鼠標從某元素移開 |
onmouseover |
鼠標被移到某元素之上 |
onmouseup |
某個鼠標按鍵被鬆開 |
onreset |
重置按鈕被單擊 |
onresize |
窗口或者框架被調整尺寸 |
onselect |
文本被選定 |
onsubmit |
提交按鈕被單擊 |
onunload |
用戶退出頁面 |
窗口事件
load
事件resize
事件scroll
事件鼠標事件
鍵盤事件與事件冒泡,獲取
window
對象document
對象location
對象navigator
對象screen
對象history
對象JavaScript
的DOM
操做,包含獲取節點,獲取,設置元素的屬性值,建立,添加節點,刪除節點,屬性操做。
DOM
對象Document Object Model
,文檔對象模型屬於BOM
的一部分,用於對BOM
中的核心對象document
進行操做。html dom
模型被構造爲對象的樹。DOM
操做獲取節點的方法:
id
獲取:document.getElementById(idName)
name
屬性獲取:返回元素數組document.getElementsByName(name)
document.getElementsByClassName(className)
document.getElementsByTagName(tagName)
獲取,設置元素的屬性值
getAttribute(attributeName)
方法,//括號出入輸入名,返回對應屬性的屬性值setAttribute(attributeName,attributeValue)
方法,//傳入屬性名以及設置的值示例:
<script> window.onload=function(){ mytable = document.getElementById('mytable'); // 獲取mytable中標籤名爲tr的字節點 trs = mytable.getElementsByTagName("tr"); len = trs.length; flag = true; for(i=0;i<len;i++){ if(flag){ trs[i].setAttribute('bgcolor','#cccccc'); flag = false; }else{ flag = true; } } ww = mytable.getAttribute('width'); } </script> <body> <table id="mytable' align='center' width="80%" border="1"> <tr bgcolor = "#cccccc"> <td>aaa</td> <td>bbb</td> <td>ccc</td> </tr> </table> </body>
建立,添加節點
代碼:
// 建立節點: document.createElement("h1"); document.createTextNode(String); document.createAttribute("class");
代碼:
element.appendChild(Node); element.insertBefore(newNode, existingNode);
代碼:
element.removeChild(Node)
屬性操做:獲取當前元素的父節點,獲取當前元素的子節點,獲取當前元素的同級元素,獲取當前元素的文本,獲取當前節點的節點類型,設置樣式。
代碼:
element.parentNode
代碼:
element.chlidren
代碼:
element.nextElementSibling element.previousElementSibling
代碼:
element.innerHTML element.innerText
代碼:
node.nodeType
BOM
對象,稱爲內置對象,是瀏覽器對象模型,也是JavaScript
的重要組成部分。window
-》document,location,navigator,screen,history
window
對象表示瀏覽器窗口window.innerHeight
獲取瀏覽器窗口的內部高度,window.innerWidth
獲取瀏覽器窗口的內部寬度。document.documentElement.clientHeight
,document.documentElement.clientWidth
;document.body.clientHeight
,document.body.clientWidth
。window.open(url)
。window.close()
。window.resizeTo(寬,高)
document對象
document
屬性和方法:
屬性和方法 | 說明 |
---|---|
document.bgColor |
設置頁面背景顏色 |
document.fgColor |
設置前景色 |
document.linkColor |
未點擊過的連接顏色 |
document.alinkCOlor |
激活連接的顏色 |
document.vlinkColor |
已點擊過的連接顏色 |
document.URL |
設置url屬性,從而在同一窗口打開另外一網頁 |
document.cookie |
設置或讀出cookie |
document.write() |
動態地向頁面寫入內容 |
document.createElement(Tag) |
建立一個HTML標籤對象 |
document.getElementById(ID) |
得到指定id 值的對象 |
document.getElementsByName(Name) |
得到指定name 值的對象 |
document.body |
指定文檔主體的開始和結束 |
document.location.href |
完整url |
document.location.reload() |
刷新當前網頁 |
document.location.reload(url) |
打開新的網頁 |
location對象
location
屬性和方法:
屬性和方法 | 說明 |
---|---|
location.href |
顯示當前網頁的url連接 |
location.port |
顯示當前網頁連接的端口 |
location.reload() |
從新刷新當前頁面 |
navigator
對象
navigator
對象包含有關瀏覽器的信息
| 屬性 | 說明 |
| :--- | :--- |
| appName
| 返回瀏覽器的名稱 |
| appVersion
| 返回瀏覽器的平臺和版本信息 |
| cookieEnabled
| 返回指明瀏覽器的是否啓用cookie
的布爾值 |
| platform
| 返回運行瀏覽器的操做系統平臺 |
screen對象
window
對象的screen
屬性都引用一個scrren
對象。screen
對象中存放有關顯示瀏覽器屏幕的信息。screen
對象的屬性:
屬性 | 說明 |
---|---|
availHeight |
返回顯示屏幕的高度 |
availWidth |
返回顯示屏幕的寬度 |
bufferDepth |
設置或者返回調色板的比特深度 |
Height |
返回顯示器屏幕的高度 |
Width |
返回顯示器屏幕的寬度 |
history對象
history
對象包含用戶訪問過url。history
對象的屬性:
屬性 | 說明 |
---|---|
history.length |
返回瀏覽器歷史列表中的url數量 |
history.back() |
加載history 列表中的前一個url |
history.forward() |
加載history 列表中的下一個url |
history.go() |
加載history 列表中的某個具體頁面 |
數學函數
屬性 | 說明 |
---|---|
ceil |
大於或等於該數的最小整數,向上取整 |
floor |
小於或等於該數的最大整數,向下取整 |
min(參數1,參數2) |
返回最小值 |
max(參數1,參數2) |
返回最大值 |
pow(參數1,參數2) |
返回數值1的數值2次方 |
random() |
返回隨機數 |
round(數值) |
四捨五入 |
sqrt(數值) |
開平方根 |
日期函數
set
:用於設置Date
對象的日期和時間的值。get
:用去獲取Date
對象的日期和時間的值。to
:用於返回Date
對象的字符串格式的值。parse和UTC
:用於解析Date
字符串。屬性 | 說明 |
---|---|
getFullYear() |
獲取完整的年份 |
getMonth() |
獲取當前月份 |
getDate() |
獲取當前日 |
getDay() |
獲取當前星期幾 |
getTime() |
獲取當前時間(從1970.1.1開始) |
getHours() |
獲取當前小時數 |
getMinutes() |
獲取當前分數 |
getSeconds() |
獲取當前秒數 |
toLocalDateString() |
獲取當前日期 |
toLocalTimeString() |
獲取當前時間 |
toLocalString() |
獲取日期與時間 |
setInterval()
,按照指定的週期調用函數或者計算表達式。setTimeout()
,在指定的毫秒數後調用函數或者計算表達式。setTimeout()
只運行一次,setInterval()
是循環執行的。代碼:
function 函數名(參數){ 函數體 return 返回值 }
代碼:
function web1 () { document.write("1"); } web1(); var web2 = function(){ document.write("2") } web2(); // 無須調用,直接執行,此方法不經常使用 var web3 = new function( document.write("3") );
在js中一個函數在另外一個函數中定義,就能夠訪問到父函數的成員,內部的函數就稱爲閉合函數。
閉合是詞法閉包的簡稱,是引用了自由變量的函數。
閉包函數的特色:
代碼:
function init() { var name = "web"; // name 是一個被 init 建立的局部變量 function displayName() { // displayName() 是內部函數,一個閉包 alert(name); // 使用了父函數中聲明的變量 } displayName(); } init();
init()
建立了一個局部變量 name
和一個名爲 displayName()
的函數。
displayName()
是定義在 init()
裏的內部函數,而且僅在 init()
函數體內可用。
displayName()
沒有本身的局部變量。然而,由於它能夠訪問到外部函數的變量,因此 displayName()
可使用父函數 init()
中聲明的變量 name
。
displayName()
函數內的 alert()
語句成功顯示出了變量 name
的值(該變量在其父函數中聲明)。
這個詞法做用域的例子描述了分析器如何在函數嵌套的狀況下解析變量名。
詞法指,詞法做用域根據源代碼中聲明變量的位置來肯定該變量在何處可用。嵌套函數可訪問聲明於它們外部做用域的變量。
閉包是一個擁有許多變量和綁定了這些變量的環境的表達式(一般是一個函數),於是這些變量也是該表達式的一部分。
JavaScript
中全部的function
都是一個閉包。不過通常來講,嵌套的function
所產生的閉包更爲強大,也是大部分時候咱們所謂的「閉包」。
閉包的做用
在a執行完並返回後,閉包使得Javascript的垃圾回收機制GC不會收回a所佔用的資源,由於a的內部函數b的執行須要依賴a中的變量。
代碼以下:
for(var i = 0 ; i<10; i++){ setTimeout(function(){ console.log(i); },100); }
返回的是10個10。
解決:
for(var i = 0; i<10 ; i++){ (function(i){ setTimeout(function(){ console.log(i); }, i*100); })(i); }
ES6以前,使用var聲明變量會變量提高問題:
for(var i = 0 ; i<10; i++) { console.log(i) }; console.log(i); // 變量提高 返回10
new Object()
和{}
實現。示例:
// 1 var Person = function(id,name){ this.id = di; this.name = name; } var user1 = new Person(1,"web"); // 2 var web1 = {id:1,name:"web"}; var web2 = Object.create({id:2,name:"web"});
建立正則表達式
使用一個正則表達式字面量:
let reg = /ab+c/; let reg = /^[a-zA-z]/gi;
字符串方法
屬性 | 說明 |
---|---|
search() |
檢索與正則表達式相匹配的值 |
match() |
找到一個或者多個正則表達式的匹配 |
replace() |
替換與正則表達式的字符串 |
split() |
把字符串分割爲字符串數組 |
正則對象方法
RegExp對象方法
屬性 | 說明 |
---|---|
test() |
用於檢測一個字符串是否匹配某個模式 |
exec() |
該方法用於檢索字符串中的正則表達式的匹配,該函數返回一個數組 |
[a-z] 匹配小寫字母從a到z中的任意一個字符
[A-Z] 匹配大寫字母從a到z中的任意一個字符
[0-9] 匹配數字0到9中任意一個字符,等於 \d
[0-9a-z] 匹配數字0到9或者小寫字母a到z中任意一個字符。
[0-9a-zA-Z] 匹配數字0到9或小寫a到z或大寫A到Z中任意一個字符
[abcd] 匹配字符abcd中的任意一個字符
[^a-z] 匹配除小寫字母a到z外的任意一個字符
[^0-9] 匹配除數字0到9外的任意一個字符
[^abcd] 匹配除abcd外的任意一個字符
元字符是擁有特殊含義的字符:
. 查找單個字符,除了換行和行結束符。
\w 查找單詞字符。
\W 查找非單詞字符。
\d 查找數字。
\D 查找非數字字符。
\s 查找空白字符。 \S 查找非空白字符。
\0 查找 NUL 字符。 \n 查找換行符。 \f 查找換頁符。 \r 查找回車符。 \t 查找製表符。 \v 查找垂直製表符。
\xxx 查找以八進制數 xxx 規定的字符。 \xdd 查找以十六進制數 dd 規定的字符。 \uxxxx 查找以十六進制數 xxxx 規定的 Unicode 字符。
量詞描述
量詞 | 描述 |
---|---|
n+ |
至少一個 n 的字符串。 |
n* |
零個或多個 n 的字符串。 |
n? |
零個或一個 n 的字符串。 |
n{X} |
X 個 n 的序列的字符串。 |
n{X,Y} |
X 至 Y 個 n 的序列的字符串。 |
n{X,} |
至少 X 個 n 的序列的字符串。 |
n$ |
匹配任何結尾爲 n 的字符串。 |
^n |
匹配任何開頭爲 n 的字符串。 |
?=n |
匹配任何其後緊接指定字符串 n 的字符串。 |
?!n |
匹配任何其後沒有緊接指定字符串 n 的字符串。 |
.定位符 定位符能夠將一個正則表達式固定在一行的開始或者結束,也能夠建立只在單詞內或者只在單詞的開始或者結尾處出現的正則表達式。
^ 匹配輸入字符串的開始位置
$ 匹配輸入字符串的結束位置
\b 匹配一個單詞邊界
\B 匹配非單詞邊界
/^[\d]{4}-[\d]{1,2}-[\d]{1,2}${1,2}$]/ 日期字符
轉義符 使用轉義符(反斜槓\)進行轉義
new RegExp(str[, attr])
接收2個參數,str
是一個字符串,指定正則表達式匹配規則,attr
可選,表示匹配模式,值有g(全局匹配),i(區分大小寫的匹配)和m(多行匹配)
。
表達式:g,i,m g 表示全局模式 應用於全部字符串,而非在發現第一個匹配項就中止 i 表示不區分大小寫模式 m 表示多行模式 繼續查找下一行中是否存在模式匹配的項
修飾符 | 描述 |
---|---|
i |
執行對大小寫不敏感的匹配。 |
g |
執行全局匹配。 |
m |
執行多行匹配。 |
函數的實際參數會被保存在一個類數組對象 arguments 對象中,經過索引訪問具體的參數:
var a = arguments[i]
arguments.length
來獲取實際傳入參數的數量arguments
對象來獲取每一個參數onBlur:當失去輸入焦點後產生該事件
onFocus:當輸入得到焦點後,產生該文件
Onchange:當文字值改變時,產生該事件
Onselect:當文字加亮後,產生該文件
1.若是本文對你有幫助,就點個贊支持下吧,你的「贊」是我創做的動力。
2.添加微信【xiaoda0423】,拉你進技術交流羣一塊兒學習。