事件對象:
就是用來存儲事件相關的信息
事件對象存儲信息有:
事件的類別,如:click,keydown等等
點擊事件的位置
點擊的哪一個鍵
等等
用於阻止事件流,用於阻止瀏覽器默認動作(表單提交、a標簽跳轉等)
ie 678
通過關鍵詞event獲取
標簽對象.onclick = function() {
window.event // 關鍵詞 里面存放了事件相關的信息
}
主流
標簽對象.onclick = function(evt) { // 實戰工作event - evt -> e
evt
}
作用
監聽表單提交
阻止瀏覽器默認動作
阻止事件流
記錄鼠標位置
事件委托
通過js給頁面新增的標簽/元素/節點,要注意默認沒有任何事件,需要單獨設置
可以使用事件委托將事件委托給父元素注冊
正則
是什么
又成規則表達式,描述了匹配字符串的規則
由我們自己來書寫 “規則”,專門用來檢測 字符串 是否符合 “規則” 使用的
我們使用一些特殊的字符或者符號定義一個 “規則公式”,然后用我們定義好的 “規則公式” 去檢測字符串是不是合格
能干嘛
對表單域項目(用戶名、密碼、郵箱、qq號碼、手機等等)進行驗證
內容替換、獲取
網絡爬蟲(一個網站到另一個網站的頁面上去獲取對方的相關信息)
最最最常用:表單驗證
var regexp = /正則表達式/可選修飾符
var regexp = new RegExp(“正則表達式”,可選修飾符)
語法:正則.test(字符串)
返回:判斷正則表達式是否匹配成功 成功-true,失敗-false
語法:正則.exec(字符串)
返回:匹配符合正則表達式條件的數據 成功-數組,失敗-null
元字符
. : 匹配非換行的任意字符
\ : 轉譯符號,把有意義的 符號 轉換成沒有意義的 字符,把沒有意義的 字符 轉換成有意義的 符號
\s : 匹配空白字符(空格/制表符/...)
\S : 匹配非空白字符
\d : 匹配數字
\D : 匹配非數字
\w : 匹配數字字母下划線
\W : 匹配非數字字母下划線
限定符
* : 前一個內容重復至少 0 次,也就是可以出現 0 ~ 正無窮 次
+ : 前一個內容重復至少 1 次,也就是可以出現 1 ~ 正無窮 次
? : 前一個內容重復 0 或者 1 次,也就是可以出現 0 ~ 1 次
{n} : 前一個內容重復 n 次,也就是必須出現 n 次
{n,} : 前一個內容至少出現 n 次,也就是出現 n ~ 正無窮 次
{n,m} : 前一個內容至少出現 n 次至多出現 m 次,也就是出現 n ~ m 次
^ : 表示開頭
$ : 表示結尾
() : 限定一組元素
[] : 字符集合,表示寫在 [] 里面的任意一個都行
[^] : 反字符集合,表示寫在 [^] 里面之外的任意一個都行
- : 范圍,比如 a-z 表示從字母 a 到字母 z 都可以
| : 或,正則里面的或 a|b 表示字母 a 或者 b 都可以
i : 表示忽略大小寫
這個 i 是寫在正則的最后面的
/\w/i
就是在正則匹配的時候不去區分大小寫
g : 表示全局匹配
這個 g 是寫在正則的最后面的
/\w/g
就是全局匹配字母數字下划線
es6
聲明變量
var 變量名 = 變量值; //聲明變量,函數作用域
let 變量名 = 變量值; //聲明變量,塊級作用域(ps. 作用域內不能重復定義)
const 變量名 = 變量值; //聲明常量 (ps. 不能修改)
解構賦值
let [變量1=默認值1,....,變量n=默認值n] = [值1,....,值n];
let {鍵1:變量1=默認值1,....,鍵n:變量n=默認值n} = {鍵1:值1,....,鍵n:值n}; 鍵和變量名一樣,可簡寫
模板語法
通過反引號包住大段HTML
通過${變量名}包裹變量(可選)
箭頭函數
(參數1,...,參數n) => {}
set(去重) 和 map
class類
json 格式
將 對象或數組格式的字符串轉換為 原格式,語法:JSON.parse(字符串格式的數組或對象)
將 數組和對象轉換為 字符串 語法:JSON.stringify(數組或對象)
this具體應用
A普通函數調用 this => window對象 function 函數名() 函數名()
B對象函數調用 this => 對象 var obj = {屬性名:function(){}}
C事件處理函數調用 this => 事件源對象(你操作了誰)
D定時器調用 this => window對象
E箭頭函數中調用 this => 父function中的this 父沒有就是window對象
F bind/apply/call 你指定的
面向對象
是一種編程思想
面向過程:就是將一個項目功能,分成若干個小功能或者子功能,然后從前向后一步步實現,最終完成項目。
面向對象:就是將項目功能拆分成一個個小對象,每個小對象獨立完成一個功能,可以通過“調用”多個對象實現項目功能(封裝)。
特性
封裝:功能封裝,便於后期調用,維護
為了增加構造函數為成員的控制,會通過修飾符讓一些數據不能被外部修改
繼承:減少了代碼的冗余,省略了很多重復代碼
通過繼承可以給構造函數添加成員,例如:創建好構造函數,去繼承一個已經存在的對象
繼承單個成員:構造函數.prototype.成員名稱 = 值;
繼承多個成員:構造函數.prototype = 對象;
多態:不同的子類根據具體狀況可以實現不同的方法,光有父類定義的方法不夠靈活
調用
var 變量名 = new Object();
變量名.鍵 = 值;
創建
function 函數名() {
創建對象
返回對象
推薦首字母大寫 例如系統構造函數
通過this.鍵 = 值 添加成員
不需要返回對象 后期通過new 關鍵詞創建即可
}
原型
就是js給函數提供的一個功能空間,來存放公共數據
好處:減少內存空間的浪費占用
怎么存:構造函數名.prototype.成員 = 值 或 構造函數名.prototype = 值
對象怎么讀:對象.成員 (先去自己里面找,找不到原型對象中找也就是公共空間)
對象.__ proto__.成員
原型鏈
多個原型對象的集合
使用對象屬性先用自己,找不到
.__proto__查找, 找不到
再去 .__proto__ 里面找
一直找到 Object.prototype 里面都沒有,那么就會返回 undefiend
PHP簡介
是什么:就是一個語言
能干嗎:可以寫動態網頁
有點:和java比開發快,節約成本
運行環境
WAMP架構
LAMP架構
操作系統不同:window、linux
搭建運行環境
手動搭建:Apache、MySQL、PHP
自動搭建(一鍵安裝包):phpstudy、wampserver
配置項目
<VirtualHost _default_:80>
ServerName 網址(去修改host文件 聲明網址對應哪一台服務器)
DocumentRoot "項目存放目錄"
<Directory "項目存放目錄">
Options +Indexes +FollowSymLinks +ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>
是什么:就是一個語言
能干嗎:可以寫動態網頁
有點:和java比開發快,節約成本
WEB相關概念
什么是服務器:沒有顯示器的主機,放在機房
IP地址
計算機一個唯一的標識,通過這個標識/編號可以相互訪問
域名/網址:方便用戶記憶,但最終還是走ip
DNS域名服務器:其實就是一個文件,記錄網址對應哪一個ip地址
端口號:門牌號,計算機有很多軟件,通過端口號可以明確交給哪一個處理
web服務器幾乎都是:80
MySQL:3306
PHP語法
聲明變量 $變量名 = 變量值;
判斷 if(條件){}elseif (條件) {} .... else {}
循環while for do...while
循環foreach($數據 as $鍵=>$值) {}
函數 function 函數名($形參1,...,$形參n) {}
MySQL數據庫
作用:用來存放網站數據
navicat是什么:就是管理數據庫的軟件
navicat快捷鍵
關閉窗口 ctrl+w
設計表:ctrl + d
執行sql語句:ctrl +q
增:insert into 表名 (字段名....) values (值....)
刪:delete from 表名 [where 條件]
改:update 表名 set 字段名=字段值,....字段名n=值n [where條件]
查:select * from 表名 [where條件]
PHP操作數據庫
連接數據庫:$pdo = new PDO('mysql:dbname=數據庫名', '賬號', ‘密碼’)
增刪改 $rs = $pdo->exec(SQL語句) // result rs 返回受影響的行數
查:
$pdoStatement = $pdo->query(SQL語句)
$data = $pdoStatement->fetch(PDO::FETCH_ASSOC)
$datas = $pdoStatement->fetchAll(PDO::FETCH_ASSOC)
輸出語句
var_dump(數據或變量名)
echo '<pre>'; print_r(數據或變量名)
echo 用來輸出基本類型數據
基本類型輸出用echo
復雜數據類型print_r或var_dump 打印數據類型用var_dump 不用數據類型print_r
echo '<pre>'; print_r(數據或變量名)
echo 用來輸出基本類型數據
基本類型輸出用echo
復雜數據類型print_r或var_dump 打印數據類型用var_dump 不用數據類型print_r
接口
就是一個文件,可以是js/php/json等 只要返回json數據(就是js大括號對象)
1-數據角度:可以實現網站數據動態化,2-功能角 笑話接口等
1-自己寫,2-去百度接口平台
cookie
取:document.cookie
存:
document.cookie = ‘鍵1=值1; expires=時間’
....
document.cookie = ‘鍵n=值n; expires=時間’
var d = new Date()
d.setTime( d.getTime() + 3600*1000*24*天數);
d.toUTCString()
h5存儲
localStorage.setItem(鍵,值)
localStorage.getItem/removeItem(鍵)
sessionStorage.setItem(鍵,值)
sessionStorage.getItem/removeItem(鍵)
都是存儲網站數據,從而減輕后端壓力,加快網站訪問速度。
區別
1性能2存儲空間3存儲時間
http
什么是http:就是一個協議/規則
作用:客戶端如何請求服務端,服務端如何響應給客戶端
請求(request)
響應(response)
請求:請求行、請求頭、請求體
響應:響應行、響應頭、響應體
AJAX
異步請求(ajax):允許客戶端和服務端 無刷新通信的技術。
特點:不用刷新頁面
好處:減輕服務器壓力,用戶體驗度更好
// 步驟1:創建ajax對象:
var xhr = new XMLHttpRequest();
// 步驟2:時時監聽ajax狀態
xhr.onreadystatechange = fn
// 步驟3:創建HTTP請求頭
xhr.open(請求類型POST/GET,請求地址URL,[異步true或者同步false])
// 注:POST請求必須設置請求編碼,不然后端無法解析獲取數據
xhr.setRequestHeader( "content-type", "application/x-www-form-urlencoded" );
// 步驟4:發送請求
xhr.send(POST請求則為POST請求數據/GET請求則null)
function fn() {
//只要ajax狀態改變就打印
if (xhr.readyState == 4 && xhr.status == 200) {
alert(xhr.responseText);
}
}
比如走http協議,也就是通過web服務器來訪問
get請求 參數在地址欄 格式 :xxx.后綴?鍵1=值1&...&鍵n=值n
post請求 參數 send(鍵1=值1&...&鍵n=值n)
post請求 xhr.setRequestHeader 必須在 xhr.open后面
同步和異步概念:
同步: 指的就是事情要一件一件做。等做完前一件才能做后一件任務
異步: 不受當前任務的影響,兩件事情同時進行,做一件事情時,不影響另一件事情的進行。
編程中:異步程序代碼執行時不會阻塞其它程序代碼執行,從而提升整體執行效率。