入門篇
JS:是一種解釋性的弱類型腳本語言盾碗,用來給HTML網(wǎng)頁增加動態(tài)功能
JavaScript語句是發(fā)給瀏覽器的命令。這些命令的作用是告訴瀏覽器要做的事情每瞒。
在 JavaScript 中葵袭,對象是擁有屬性和方法的數(shù)據(jù)(JavaScript 中的所有事物都是對象:字符串、數(shù)字进统、數(shù)組、日期浪听,等等螟碎。[一切事物皆對象])
屬性是與對象相關(guān)的值
方法是能夠在對象上執(zhí)行的動作(事件)
JS 組成部分
1、ECMAScript:核心迹栓、擔(dān)當(dāng)?shù)氖且粋€翻譯的角色掉分;是一個解釋器,幫助計算機來讀懂我們寫的程序
2克伊、DOM:文檔對象模型酥郭;文檔指的就是網(wǎng)頁;把網(wǎng)頁變成一個JS可以操作的對象
3愿吹、BOM:瀏覽器對象模型不从;給了JS操作瀏覽器的能力
數(shù)據(jù)類型
原始類型:5種
number(數(shù)值), string(字符串), boolean(true、false),null, undefined
對象類型(引用類型):
如 Object犁跪、Array 椿息、Date歹袁、Function
變量:用來存儲信息的容器
我們可以把變量看做是 存儲數(shù)據(jù)的容器(我們可以把變量看做一個盒子,盒子用來存放物品,var就相當(dāng)于找盒子的動作)
定義變量使用關(guān)鍵字var,語法如下:var變量名(var num = 12寝优;)
變量名可以任意取名条舔,但要遵循命名規(guī)則:
1.變量必須使用字母、下劃線(_)或者美元符($)開始乏矾。
2.然后可以使用任意多個英文字母孟抗、數(shù)字、下劃線(_)或者美元符($)組成妻熊。
3.不能使用JavaScript關(guān)鍵詞與JavaScript保留字夸浅。
變量可以先聲明再賦值仑最,也可以重復(fù)賦值
作用域:變量能夠起作用的范圍
全局變量:其作用域是整個源程序扔役,它不屬于哪一個函數(shù)
局部變量:作用域僅限于函數(shù)內(nèi), 離開該函數(shù)后再使用這個變量是非法的警医。
函數(shù)內(nèi)部可以直接讀取全局變量亿胸,函數(shù)外部無法讀取函數(shù)內(nèi)部的局部變量
函數(shù)內(nèi)部聲明變量時,一定要使用var命令预皇,如果不用侈玄,實際上就聲明了一個全局變量
(注意:從函數(shù)外部讀取局部變量的方法,在函數(shù)的內(nèi)部再定義一個函數(shù))
函數(shù)作用域和塊級作用域
塊級作用域({}稱之為一塊)指的是定義在條件或循環(huán)分支中的
JavaScript函數(shù)沒有塊級作用域
函數(shù)作用域:變量在定義的函數(shù)內(nèi)及嵌套的子函數(shù)內(nèi)處處可見吟温;
塊級函數(shù)域:變量在離開定義的塊級代碼后馬上被回收序仙。
confirm消息對話框通常用于允許用戶做選擇的動作,如:“你對嗎鲁豪?”等潘悼。彈出對話框(包括一個確定按鈕和一個取消按鈕)。
prompt彈出消息對話框,通常用于詢問一些需要與用戶交互的信息爬橡。
彈出消息對話框(包含一個確定按鈕治唤、取消按鈕與一個文本輸入框)。
打開新的窗口 ?window.open('路徑地址','_blank','height=600,width=400,top=100,left=0'); 可以設(shè)置它的工具條滾動條狀態(tài)欄
關(guān)閉本窗口? window.close()糙申;關(guān)閉指定窗口? <窗口對象>.close();
進階篇
文檔對象模型 DOM(Document Object Model)定義訪問和處理HTML文檔的標(biāo)準(zhǔn)方法宾添。DOM 將HTML文檔呈現(xiàn)為帶有元素、屬性和文本的樹結(jié)構(gòu)(節(jié)點樹)柜裸。
HTML文檔可以說由節(jié)點構(gòu)成的集合缕陕,DOM節(jié)點有:
1.元素節(jié)點
2.文本節(jié)點
3.屬性節(jié)點:元素屬性,如標(biāo)簽的鏈接屬性疙挺。
var el = document.getElementById('');? 是通過ID獲取
var el =document.getElementsByName(''); 是通過name獲取
var el =document.getElementsByTagName(''); 是通過標(biāo)簽名獲取
復(fù)選框全選思路:1.先用getElementsByTagName獲取input的標(biāo)簽名 2.for循環(huán) 3.if判斷 如果type=="checkbox"扛邑,就讓它全部選中
var mylist = document.getElementById("tcon");
document.write(mylist.parentNode.parentNode.parentNode.lastChild.innerHTML);
上邊是 獲取id為tcon的元素 ,打印它的祖父節(jié)點(父節(jié)點的父節(jié)點的父節(jié)點)的最后一個節(jié)點的HTML
var衔统、let鹿榜、const聲明變量
1海雪、var:聲明全局變量,能重復(fù)聲明覆蓋舱殿,會出現(xiàn)變量提升的情況
2奥裸、let:聲明局部變量,限制了變量的作用域沪袭,保證變量不會去污染全局變量湾宙,不會出現(xiàn)變量提升
(注意:必須聲明'use strict'后才能使用let聲明變量,否則瀏覽并不能顯示結(jié)果)
3冈绊、const:聲明常量(也具有塊級作用域 )侠鳄,一旦定義就不可改變
定義那些不可以被重新賦值的變量
ES6中,let死宣、const在任何情況下都優(yōu)于var伟恶,所以不建議使用var
函數(shù):由事件驅(qū)動的或者當(dāng)它被調(diào)用時執(zhí)行的可重復(fù)使用的代碼塊。
1毅该、函數(shù)聲明? ? function fn (){}? ? ? ? 【 fn:function(){} 】
會被解析器自動提升到代碼的頭部博秫,違背了函數(shù)先定義后使用的要求。這里的函數(shù)名fn是必須要有的
2眶掌、函數(shù)表達(dá)式(命名式函數(shù))? var a = function fn(){}挡育;
3、自運行函數(shù) (function fn (){})();? 用于存放開發(fā)插件的代碼
函數(shù)這么定義的原因就是為了封閉作用域而不至于污染其他文件
4朴爬、匿名函數(shù)? 不能直接聲明即寒、需要賦值調(diào)用
window.onload=function(){}
var say = function(){}
jQuery(function(){ })與(function(){ })(jQuery)
jQuery(function(){ }) ;用于存放操作DOM對象的代碼,執(zhí)行其中代碼時DOM對象已存在召噩。不可用于存放開發(fā)插件的代碼母赵,因 為jQuery對象沒有得到傳遞,外部通過jQuery.method也調(diào)用不了其中的方法(函數(shù))蚣常。
(function(){ })(jQuery)市咽;用于存放開發(fā)插件的代碼,執(zhí)行其中代碼時DOM不一定存在抵蚊,所以直接自動執(zhí)行DOM操作的代碼施绎,請小心使用。
原型 ? prototype和__proto__
顯式原型:prototype 是函數(shù)的一個屬性(每個函數(shù)都有一個prototype屬性)贞绳,這個屬性是一個指針谷醉,指向一個對象。它是顯示修改對象的原型的屬性冈闭、返回的是對象的類的原型
隱式原型:__proto__? 是一個對象擁有的內(nèi)置屬性(請注意:prototype是函數(shù)的內(nèi)置屬性俱尼,__proto__是對象的內(nèi)置屬性),是JS內(nèi)部使用尋找原型鏈的屬性萎攒,用于調(diào)試
用chrome和FF都可以訪問到對象的__proto__屬性遇八,IE不可以矛绘。
this
this指當(dāng)前對象
1、在函數(shù)外使用刃永,this指向window
2货矮、在函數(shù)內(nèi)使用
(1)函數(shù)直接被調(diào)用
(function fn(){console.log(this)})();
(2)被事件所調(diào)用,并且以賦值的形式出現(xiàn)(這兩個條件缺一不可)
誰調(diào)用了函數(shù)斯够,this就指向誰
AJAX請求
$.ajax({
? ? ? type: 'GET', ? ? ? ? ? ? ?// 這是請求的方式 可以是GET方式也可以是POST方式, 默認(rèn)是GET
? ? ? url: ' xxx.php ', ? ? ? ? ?// 這是請求的連接地址 一般情況下這個地址是后臺給前端的一個連接囚玫,直接寫就可以
? ? ? dataType: 'json', ? ? ? // 這是后臺返回的數(shù)據(jù)類型 一般情況下都是一個json數(shù)據(jù), 前端遍歷一下就OK
? ? ? data: { ? ? ? // 要傳遞的參數(shù)? 'xxx' : 'xxx', },
? ? ? success: function (data) { // 發(fā)送請求成功后開始執(zhí)行读规,data是請求成功后抓督,返回的數(shù)據(jù) },
? ? ? error: function (xhr, textStatus, errorThrown) { ? ? ? //? 請求失敗后就開始執(zhí)行,請求超時后束亏,在這里執(zhí)行請求超時后要執(zhí)行的函數(shù) }
? ? ? async: true, ? ? ? ? ? ? ? // 默認(rèn)為true铃在,默認(rèn)為true時,所有請求均為異步請求枪汪,如果需要發(fā)送同步請求涌穆,需設(shè)置為false,
? ? ? timeout: 8000, ? ? ? ? ?// 設(shè)置請求超時時間(毫秒)。此設(shè)置將覆蓋全局設(shè)置
? ? ? beforeSend: function () { ? ? ? // 在發(fā)送請求前就開始執(zhí)行 (一般用來顯示loading圖)? },
? ? ? complete: function () { ? ? ? //當(dāng)請求完成后開始執(zhí)行雀久,無論成功或是失敗都會執(zhí)行 (一般用來隱藏loading圖) },
}).done(function () { ? ? ?// 這個函數(shù)是在ajax數(shù)據(jù)加載完之后,對數(shù)據(jù)進行的判斷趁舀,在涉及到對ajax數(shù)據(jù)進行操作無效時赖捌,在這個函數(shù)里面寫是可以起到效果的
}