教你如何編程 -JavaScript

JavaScript
ESCMAScript(核心)
變量
關鍵字
一組特定用途的關鍵字:Var、if、else、do、while、for、in …
var、let用於定義變量,使用了let定義變量不能重複,使用const定義的叫常量,定義之後不能改變
保留字
未來有可能成爲關鍵字
變量命名規則
由數字、字母、下劃線和美元符號的一種或幾種組成,不能以數字開頭,嚴格區分大小寫
數據類型
基本(原始)數據類型
數字(一般用於計算)
number
字符串
string
布爾
Boolean
undefined
undefined
null
object
Symbol 類型 表示獨一無二的值
使用console.log(typeof a);//在控制檯看數據類型
引用(複合)數據類型
對象
object

	類型轉換
		顯式轉換
			把字符串轉換爲數字
				var num1 = parseInt();  //把字符串轉換成整數數值(取出整數部分)
				parseFloat();   //把字符串直接轉換成浮點數(小數)
				number();   //\n把字符串直接轉換成數字(只有純數字才能轉換,如果裏面包含有字母,就直接轉爲NAN【不是數字】)
			把數字轉換爲字符串
				console.log(string(num));    //直接轉化爲字符串
				console.log(booLean(0));     //轉換爲布爾值,只有值爲0,輸出false,其他值輸出爲true
		隱式轉換
	運算符
		算術運算符
			+
			-
			*
			/
			%
				求餘數  求n/m的餘數    n/2看結果可知道n爲奇偶
			**
				求次方 n**m   求n的m次方
		賦值運算符
			=
				直接賦值
			+=
				box+=10;  //box結果爲原先的box值加10
			-=
				box-=10;  //box結果爲原先的box值減10
			*=
				box*=10;  //box結果爲原先的box值乘10
			/=
				box/=10;  //box結果爲原先的box值處以10
			%=
				box%=10;  //box結果爲原先的box值處以10的餘數
		關係運算符
			>
				n>m;  //當結果爲正確時,打印出來的結果爲true,反之爲false
			<
			<=
			>=
			==
				用於判斷是否相等,只判斷數字是否相等
			!=
				用於判斷是否不相等,不光比較數值,還比較類型
			===
				全等,精確相等,判斷等號前後是否完全一致,不光比較數值,還比較類型
			!==
				只判斷數字是否不相等
		單目運算符
		雙目運算符
			1+2;
		三目運算符(相當於一個if  else判斷)
			let res1 = 1 > 2 ? 2 : 3;  console.log(res1)     // let res1 = 表達式1 ? 表達式2 : 表達式3;(如果表達式1的值爲true,整個表達式的值爲表達式2,反之結果爲表達式3)
	程序的基本結構
		順序結構
			代碼從上往下執行
		選擇結構(分支結構)
			單分支
				if
					if (){}
				if   else
					if (){}else{}
				switch
					switch (){case:     console.log()      break;    default:  console.log()    break;     }
			多分支
			雙分支
		循環結構
			while 循環
				while(條件){語句}
			do while循環
				do{語句}while(條件)
			for循環
				for(初始化表達式;條件;遞增表達式){}
			循環嵌套
				外層循環循環一次,能層循環循環一圈
			死循環
				當不知道循環次數時,使用死循環然後再合適的時候結束循環
				while(true){}
				for(;;){}
			跳轉,讓代碼不按既有的順序循環
				break
					結束整個循環流程
				continue
					結束本次循環,返回循環的頭部,進入下一輪循環
	函數:一個函數只執行一個功能,可以反覆調用
		function函數
			function 函數名稱(){函數中要執行的代碼}
			變量的聲明提升(面試題)
				在函數內部使用var命令聲明的變量,會被提升到函數體的頭部,js引擎在執行js時,會先做一個預解析。提前將所都要用到的變量先定義但是沒有賦值
				function foo(x){if(x>100){var tmp=x-100;}}\n//等同於\nfunction foo(x){var tmp;if(x>100){tmp=x-100;};}
		函數表達式
			採用變量賦值的方式聲明函數
			var 函數名稱=function(){函數中要執行的代碼}
		內置函數
			parseInt();//parseInt函數  功能:把參數轉換成整數
			parseFloat();//parseFloat函數 功能:轉換爲數字
		函數和事件
			鼠標事件
				but.onclick=function(){}//鼠標左鍵單擊
				ondblclick  鼠標雙擊
				onmousedown    鼠標按鍵擡起
				onmousemove  鼠標按鍵在元素上移動
				onmouseover   鼠標進入
				onmouseout    鼠標移出    (與onmouseover是一對)  他們兩個默認冒泡
				onmouseleave    鼠標移出(與onmouseenter是一對)他們兩個默認不冒泡
				onmouseenter     鼠標移入
				oncontextmenu   鼠標右鍵點擊
			根據id名獲得HTML中的元素
				let btn=document.getElementById('btn')
			div.innerHTML獲取元素內部的HTML代碼
			div.innerHTML='字符串'//相當於替換了DIV內部的原HTML代碼
			鍵盤事件
				Onkeydown   鍵盤按鍵按下
				Onkeyup    鍵盤按鍵擡起
				Onkeypress    鍵盤按鍵按住
			表單事件
				Onblur   失去焦點
				Onfocus    獲取焦點
				Onchange     內容修改
		函數的返回值:return
			如果沒有return該函數將返回undefined
		arguments 對象
			在函數內部讀取所有的參數
			arguments【0】是第一個實參
			arguments【1】是第二個實參
			arguments【‘length’】用於求參數的長度
			arguments.length 用於求參數的長度
			console.log(arguments)  獲取所有的實參
		隨機數
			Math.random()
				它是一個【0-1)之間的數值
			parseInt(Math.random()*10)
				它是一個【0-9)之間的整數
		作用域
			局部作用域
				局部變量(形參都是局部變量)
					使用var在函數內部定義的變量
					使用let或者const在代碼塊中定義的變量
			全局作用域
				全局變量(在函數外部聲明的)
					全局變量會被同名的局部變量覆蓋
		遞歸函數
			能用循環的都能用遞歸,但是一般都用循環,循環的效率比遞歸高
			步驟
				先找臨界值
				找本項和上一項的關係
				假設當前函數已經可以用了,調用上一次的結果寫出關係式
		構造函數
			函數名(首字母大寫)
			屬性
				this;//當使用new調用構造函數的時候,會自動創建一個this  是一個{}對象
				this.name=name;this age=1;
			方法
				函數
	數組
		創建
			字面量和構造函數
		方法
			尾部添加:push(改變原數組)
			尾部刪除:pop(改變原數組)
			頭部添加:unshift(改變原數組)
			頭部刪除:shift(改變原數組)
			複製數組:slice(不改變原數組)
			刪除數組:splice(改變原數組)
			反轉數組:reverse(改變原數組)
			按字典方式排序:sort(改變原數組)
			將數組轉爲字符串:join
			把多個數組合併成爲一個:concat(不改變原數組)
			判斷是不是數組Array.isArray()
			遍歷數組中的每一個元素:arr.forEach(function(v,i){})
			根據return後面的規則一一映射:arr.map(function(v,i){return v*1.3})
			用於過濾滿足條件的元素:arr.filter(function(v,i){return v>5})
			累計:arr.reduce(function(v,i){return a+b})
			數組中某個元素第一次出現的位置,找不到返回-1:arr.indexOf()
			數組中某個元素最後一次出現的位置,找不到返回-1:arr.lastIndexOf()
			判斷是否數組中的每一個元素都符合某個條件:arr.every(function(v,i){return v>3})
			判斷是否數組中有某一個元素符合某個條件:arr.some(function(v,i){return v>3})
			查找元素,返回元素,找不到返回undefined:arr.find(function(v,i){return v===3})
			查找元素,返回元素所在的下標,找不到返回undefined:arr.findIndex(function(v,i){return v===3})
			將可遍歷的對象和僞數組以及arguments對象都轉化爲數組:Array.from
			數組去重:Arrayfrom(new Set(arr))
			數組去重:【...(new Set(arr))】
			判斷數組中是否包含某個元素:includes
	字符串
		創建
			字面量
			構造函數
		方法【字符串中的所有方法都不改變原數組】
			獲取指定位置的字符:charAt
			複製字符串:slice   substr    substring
			查找某個字符串第一次出現的位置:indexOf
			查找某個字符串最後一次出現的位置:lastIndexOf
			去除字符串兩端的空格:trim
			將字符串全部轉爲小寫:toLowerCase
			將字符串全部轉爲大寫:toUpperCase
			替換字符串:str.replace(/b/g,'*')  將字符串中的所有的b替換爲*
			將字符串轉換爲數組:split
			獲取某個位置的字符的編碼:charCodeAt
			將編碼轉換爲字符串:String.fromCharCode
			判斷字符串中是否包含某個字符串:includes
			判斷是否以某個字符串開頭:startsWith
			判斷是否以某個字符串結尾:endswith
			將字符串進行重複:repeat
			查找與正則表達式相匹配的某個字符串第一次出現的位置:search
			對字符串進行正則匹配,返回匹配的結果:match
	Math
		創建
			字面量
			構造函數
		方法
			Math.PI     Π值
			Math.E     常數e的值
			Math.abs    絕對值
			Math.max   最大值
			Math.min   最小值
			arr.indexOf(Math.max(...arr))    獲取數組中的最值的位置
			Math.floor  求小於參數的最大整數值
			Math.ceil   求大於參數的最小整數值
			Math.round   四捨五入
			Math.pow   求次方
			Math.sqrt    求平方根
			Math.sin     正弦,它的參數是弧度,180度對應的Π值
			Math.random   隨機數
			隨機m-n之間的整數:parseInt(Math.random()*(n-m+1))+m
	Date
		創建
			字面量
			構造函數
				var now=new Date();     等同於    now.toString()
		方法
			getDate()    返回一個月中的某一天  (1-31)
			getDay    返回一週中的某一天  (0-6)0代表週一
			getMonth    返回月份 (0-11)   0代表一月
			getFullYear   返回年份
			getHours   返回當前小時    (0-23)
			getMinutes   返回當前分鐘   (0-59)
			getSeconds  返回當前秒   (0-59)
			getMillisenconds   返回毫秒數(0-999)
			getTimes  返回1970年至今的毫秒數
			設置即是將上面所有的get改爲set
			將日期轉爲毫秒數:Date.parse(new Date())   將日期轉換爲 相對於1970年的毫秒數
	定時器
		設置
			let timer=setInterval(function(){},1000)
		清除
			clearInterval(timer)
	延時器
		設置
			let timer=setTimeout(function(){},1000)
		清除
			clearTimeout(timer)
DOM(文檔對象模型)
	屬性操作
		自定義
			className=''
		設置
			添加class名:classList.add
			刪除class名:classlist.remove
			判斷是否包含某個類名:classList.contains
			替換類名:classList.replace('a','b')將a替換爲b
		最終樣式
			let style=box.currentStyle||getComputedStyle(box)
		獲取自定義樣式的值:getAttribute
	元素操作
		CRUD
			增(創建)
				創建元素document.createElement()
				添加子元素:appendChild()
				創建文本節點:createTextNode
				創建註釋節點:createComment
				複製元素節點:cloneNode(true)複製整個元素包括標籤裏的內容
				複製元素節點:cloneNode(false)只是單純的複製一個空標籤
				ul.insertBefore(li,ul.firstChild)將li標籤添加爲ul裏的第一個子元素
				ul.insertBefore(li,ul.lastChild)將li標籤添加爲ul裏的最後一個子元素
				box.insertBefore(span,p)將span標籤插到box標籤裏的p標籤之前
				document.createDocumentFragment()    文檔碎片     作爲容器使用   ,避免頻繁使用操作dom,減少渲染次數
			刪(刪除)
				this.remove刪除當前元素
				this.parentNode.remove刪除當前操作的父元素
				a.removeChild(b)將 a標籤裏的子元素b刪除
			改(修改)
				a.replaceChild(b,c)將a標籤中的c標籤替換爲b標籤
			查(查詢)
				document.querySelector()
				document.querySelectorAll()
				document.getElementById()
				document.getElementsByClassName()
				document.getElementsByName()
				document.getElementsByTagName()
	節點之間的關係
		childNodes獲取子節點
		children獲取子元素
		parentNode獲取父節點
		parentElement父元素
		firstChild第一個子節點
		firstElementChild第一個子元素
		lastChild最後一個節點
		lastElementChild最後一個子元素
		nextSibling下一個節點
		nextElementSibling下一個元素節點
		previousSibling上一個節點
		previousElementSibling上一個元素節點
		節點類型:nodeType
		節點的值:nodeValue
	Element
		offsetWidth    元素可視區域的寬度(當元素被隱藏時值爲零)
		offsetHeight    元素可視區域的高度(當元素被隱藏時值爲零)
		offsetParent     返回最靠近當前元素的,且定位屬性值不爲static的父元素(類似於包含塊)
		offsetLeft   元素距離offsetParent的左邊界偏移量
		offsetTop   元素距離offsetLeft的右邊界的偏移量
	事件
		HTML事件
			onload:當頁面加載完畢時觸發
			onselect:當用戶選擇文本框(input或者texteara)內容改變或者失去焦點後觸發
			onchange:當文本框(input或texteara)內容改變且失去焦點後觸發
			oninput:當(input或textarea)內部輸入輸入內容時觸發
			onfocus:當頁面或元素獲得焦點時在window及相關元素上面觸發
			onresize:當頁面或者框架的大小發生變化時觸發
			onblur:當頁面或者元素失去焦點時觸發
			onscoll:當用戶滾動帶滾動條的元素時觸發
			將元素滾動到可視區域(寫聊天框時,一直使後面發送的內容顯示)li.scrollIntoView();
		鼠標事件
			oncontextmenu:鼠標右鍵事件
			onmousedown當鼠標點擊時
			btn.onmousedown=function(e){console.log(e.button)}          0是左鍵    1是滾輪     2是右鍵
		鍵盤事件
			onkeyup   當鍵盤按鍵釋放
			onkeydown  當鍵盤按鍵被按下
			onkeypress   當用戶按下鍵盤上的字符鍵觸發
			ctrlkey   Boolean類型  表示事件發生的時候ctrlkey鍵是否被按下
			altkey    Boolean類型 表示事件發生時alt鍵是否被按下
			shiftkey      Boolean類型   表示發生事件的時候shift按鍵是否被按下
			獲取鍵碼的兼容性寫法(通過鍵碼判斷用戶是否按下了某個鍵)let keyCode=e.keyCode||e.which
			組合鍵判斷(即判斷用戶是否同時按下了兩個鍵)
				e.ctrlKey&&e.keyCode==13;  判斷是否同時按下了ctrl和回車鍵
		事件對象
			獲取
				let e=evt||window.event
			屬性
				event.button     當事件觸發時哪個按鍵被按下
				clienkX    鼠標光標相對窗口的左邊界的位置
				clienkX    鼠標光標相對窗口的右邊界的位置
				screenX  鼠標光標相對於屏幕的X座標
				screenY    鼠標光標相對於屏幕的Y座標
				offsetX  鼠標光標相對於事件源(e.target)的X座標
				offsetY    鼠標光標相對於事件源(e.target)的Y座標
				pageX  鼠標光標相對於頁面的X座標
				pageY  鼠標光標相對於頁面的Y座標
			事件源
				target    事件在哪個元素上產生
			事件冒泡
				阻止事件冒泡的兼容性寫法:e.stopPropagation();e.cancelBubble=true;
		阻止默認事件
			e.preventDefalt()       W3C的方式
			e.returnValue=false        IE的方式
		DOM2添加事件監聽器
			ele.addEventListenter(事件名,處理函數(回調函數),布爾值)【注:事件名不帶on,是一個字符串,它默認是冒泡(false)】
			IE兼容寫法  attachEvent(事件名,處理函數)【注:事件名帶on,它默認是捕獲】
		DOM2移除事件監聽器
			removeEventListener(事件名,處理函數,(false或者true))【注:事件名不帶on,是一個字符串,它默認是冒泡】
			IE兼容寫法       detachEvent(事件名,處理函數)【注:事件名帶on,它默認是捕獲】
	正則
		創建
			字面量
			構造函數
				let reg=new RegExp('sss',ig)        i忽略大小寫     g  全局匹配
		方法
			reg.test('a'):返回布爾值,表示當前正則表達式能否匹配參數字符串
				如果test匹配的正則表達式含有g
				,則每一次test方法都從上一次結束的位置開始向後匹配
			reg.exec('a')     用於檢索字符串中正則表達式的匹配,返回一個數值,其中存放的是所有匹配的結果,如未找到匹配,返回null
		字符串方法結合正則使用
			str.replace(reg,'b')    將str中滿足reg的字符串替換爲b
			str.search(reg)     返回與正則 表達式相匹配的第一個值所在的下標,不存在返回-1
			str.match(reg)    返回str中所有匹配reg的結果
		限定符
			*      匹配前面的子表達式零次或多次
			+       匹配前面的子表達式一次或多次
			?    匹配前面的子表達式零次或一次
			{n}     匹配前面的子表達式n次
			{n,m}     最少匹配n次,最多匹配m次
		字符匹配符
			[0-9]     匹配0-9中的任意一個字符
			[^0-9]    匹配除了0-9的任意一個字符
			[a-z]     26個小寫字母
			[A-Z]    26個大寫字母
			\d    相當於【0-9】
			\D   相當於【^0-9】
			\w   相當於【0-9a-zA-Z】
			\W   相當於【^0-9a-zA-Z】
			\s   匹配空格(包括換行符,製表符,空格符等)
			\S     匹配非空格的字符
			.        匹配除了\n  (換行) 之外的任何字符
		定位符
			^    限定開始(匹配輸入字符串的開始位置)
			$      限定結尾(匹配字符串的結束位置)
		轉義符
			\       用於匹配那些特殊字符(即匹配在正則中有特殊含義的字符)
		選擇匹配符
			|      相當於or
		正則分組
			/hahaha/       相當於/(ha){3}/
			捕獲型分組
				被正則表達式匹配到的內容會被暫存起來,用$1可以獲得被第一個分組捕獲的內容
			非捕獲型分組
				(?:)當不需要捕獲某個分組的時候可以使用它
	this關鍵字
		(在嚴格模式下,普通函數的this指的是undefined)
		非嚴格模式下,在全局環境下使用this,他指的就是頂層對象window
		(普通函數裏的this被誰調用它就指向誰)
		(構造函數使用new調用,this指向的是這個函數)
		(構造函數不使用new調用,this指的還是全局)
		(普通函數裏的this被誰調用它就指向誰)
		bind 方法
			bind方法用於將函數體內的this綁定到某個對象,然後返回一個新的函數
	let關鍵字
		let(定義變量)在代碼塊中聲明的變量都是局部變量
	const關鍵字
		const 定義常量,const聲明的變量不能改變值
	箭頭函數
		let f=()=>{}
	變量解構
		解構數組
			let [a,b,c]=[1,2,3]
		解構對象
			let {f,b}={b:0,f:1}
	...     擴展運算符
		將數組展開    ...arr
		合併數組      [...[1,2],...[3,4]]//[1,2,3,4]
		取出參數對象的所有可便利屬性       {...{a:1,b:2}}///{a:1,b:2}
	複製對象
		Object.assign({對象1},{對象2})//把對象2裏的所有內容拷貝到對象1裏
	Set
		數組去重
			[...(new Set([1,2,2]))] //[1,2]
		方法
			size    獲取Set的長度
			add   添加
			delete    刪除
			clear   清空
			has   判斷
		遍歷
			set.forEach((v) => console.log( v))
	Map
		方法
			set     設置
			get     獲取
			has    判斷
			delete   刪除
			clear      清除
			size    長度
		遍歷
			map.forEach((k,v)=>console.log(k,v))
			for(let [k,v] of map){console.log(k,v)}
	class  類
		constructor    默認方法
		繼承   extends
			super()
		static   關鍵字   方法前面添加此關鍵字,此方法不會被繼承,只能直接通過類調用
	JSON   字符串和對象的轉換
		JSON.parse()    將JSON字符串轉換爲對象
		JSON.stringify()     將對象轉換爲JSON字符串
	eval   函數
		計算某個字符串,並執行其中的JavaScript代碼
	localstorage
		設置
			localStorage.setItem('user','123')
		獲取
			localStorage.getItem('user')
		刪除
			localStorage.removeItem('user')
		清空
			localStorage.clear()
BOM(瀏覽器對象模型)
	location對象
		href:返回完整的URL
		hash:返回從#開始的URL
		seach:返回從?開始的URL
	history對象
		後退一頁:history.go(-1)          history.back()
		前進一頁:history.go(1)       history.forwary()
		前進兩頁:history.go(2)
	事件
		window.onresize   事件會在窗口或框架被調整大小時發生
		window.onload     事件放生在頁面加載完畢時
		window.onscroll    監聽頁面的滾動
	方法
		assign:加載新的文檔
		reload:重新加載當前文檔
		replace():用心的文檔替換當前文檔
		open:打開一個新的瀏覽器窗口或者查找一個已命名的窗口
		close:關閉瀏覽器窗口
		confirm:顯示一個帶有提示信息和確認及取消按鈕的警告框
		prompt:顯示可提示用戶進行輸入的對話框
		alert:彈出警示框
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章