入門篇
JS:是一種解釋性的弱類型腳本語言,用來給HTML網頁增加動態功能
JavaScript語句是發給瀏覽器的命令。這些命令的作用是告訴瀏覽器要做的事情。
在 JavaScript 中,對象是擁有屬性和方法的數據(JavaScript 中的所有事物都是對象:字符串、數字、數組、日期,等等。[一切事物皆對象])
屬性是與對象相關的值
方法是能夠在對象上執行的動作(事件)
JS 組成部分
1、ECMAScript:核心、擔當的是一個翻譯的角色;是一個解釋器,幫助計算機來讀懂我們寫的程序
2、DOM:文檔對象模型;文檔指的就是網頁;把網頁變成一個JS可以操作的對象
3、BOM:瀏覽器對象模型;給了JS操作瀏覽器的能力
數據類型
原始類型:5種
number(數值), string(字符串), boolean(true、false),null, undefined
對象類型(引用類型):
如 Object、Array 、Date、Function
變量:用來存儲信息的容器
我們可以把變量看做是 存儲數據的容器(我們可以把變量看做一個盒子,盒子用來存放物品,var就相當于找盒子的動作)
定義變量使用關鍵字var,語法如下:var變量名(var num = 12;)
變量名可以任意取名,但要遵循命名規則:
1.變量必須使用字母、下劃線(_)或者美元符($)開始。
2.然后可以使用任意多個英文字母、數字、下劃線(_)或者美元符($)組成。
3.不能使用JavaScript關鍵詞與JavaScript保留字。
變量可以先聲明再賦值,也可以重復賦值
作用域:變量能夠起作用的范圍
全局變量:其作用域是整個源程序,它不屬于哪一個函數
局部變量:作用域僅限于函數內, 離開該函數后再使用這個變量是非法的。
函數內部可以直接讀取全局變量,函數外部無法讀取函數內部的局部變量
函數內部聲明變量時,一定要使用var命令,如果不用,實際上就聲明了一個全局變量
(注意:從函數外部讀取局部變量的方法,在函數的內部再定義一個函數)
函數作用域和塊級作用域
塊級作用域({}稱之為一塊)指的是定義在條件或循環分支中的
JavaScript函數沒有塊級作用域
函數作用域:變量在定義的函數內及嵌套的子函數內處處可見;
塊級函數域:變量在離開定義的塊級代碼后馬上被回收。
confirm消息對話框通常用于允許用戶做選擇的動作,如:“你對嗎?”等。彈出對話框(包括一個確定按鈕和一個取消按鈕)。
prompt彈出消息對話框,通常用于詢問一些需要與用戶交互的信息。
彈出消息對話框(包含一個確定按鈕、取消按鈕與一個文本輸入框)。
打開新的窗口 ?window.open('路徑地址','_blank','height=600,width=400,top=100,left=0'); 可以設置它的工具條滾動條狀態欄
關閉本窗口? window.close();關閉指定窗口? <窗口對象>.close();
進階篇
文檔對象模型 DOM(Document Object Model)定義訪問和處理HTML文檔的標準方法。DOM 將HTML文檔呈現為帶有元素、屬性和文本的樹結構(節點樹)。
HTML文檔可以說由節點構成的集合,DOM節點有:
1.元素節點
2.文本節點
3.屬性節點:元素屬性,如標簽的鏈接屬性。
var el = document.getElementById('');? 是通過ID獲取
var el =document.getElementsByName(''); 是通過name獲取
var el =document.getElementsByTagName(''); 是通過標簽名獲取
復選框全選思路:1.先用getElementsByTagName獲取input的標簽名 2.for循環 3.if判斷 如果type=="checkbox",就讓它全部選中
var mylist = document.getElementById("tcon");
document.write(mylist.parentNode.parentNode.parentNode.lastChild.innerHTML);
上邊是 獲取id為tcon的元素 ,打印它的祖父節點(父節點的父節點的父節點)的最后一個節點的HTML
var、let、const聲明變量
1、var:聲明全局變量,能重復聲明覆蓋,會出現變量提升的情況
2、let:聲明局部變量,限制了變量的作用域,保證變量不會去污染全局變量,不會出現變量提升
(注意:必須聲明'use strict'后才能使用let聲明變量,否則瀏覽并不能顯示結果)
3、const:聲明常量(也具有塊級作用域 ),一旦定義就不可改變
定義那些不可以被重新賦值的變量
ES6中,let、const在任何情況下都優于var,所以不建議使用var
函數:由事件驅動的或者當它被調用時執行的可重復使用的代碼塊。
1、函數聲明? ? function fn (){}? ? ? ? 【 fn:function(){} 】
會被解析器自動提升到代碼的頭部,違背了函數先定義后使用的要求。這里的函數名fn是必須要有的
2、函數表達式(命名式函數)? var a = function fn(){};
3、自運行函數 (function fn (){})();? 用于存放開發插件的代碼
函數這么定義的原因就是為了封閉作用域而不至于污染其他文件
4、匿名函數? 不能直接聲明、需要賦值調用
window.onload=function(){}
var say = function(){}
jQuery(function(){ })與(function(){ })(jQuery)
jQuery(function(){ }) ;用于存放操作DOM對象的代碼,執行其中代碼時DOM對象已存在。不可用于存放開發插件的代碼,因 為jQuery對象沒有得到傳遞,外部通過jQuery.method也調用不了其中的方法(函數)。
(function(){ })(jQuery);用于存放開發插件的代碼,執行其中代碼時DOM不一定存在,所以直接自動執行DOM操作的代碼,請小心使用。
原型 ? prototype和__proto__
顯式原型:prototype 是函數的一個屬性(每個函數都有一個prototype屬性),這個屬性是一個指針,指向一個對象。它是顯示修改對象的原型的屬性、返回的是對象的類的原型
隱式原型:__proto__? 是一個對象擁有的內置屬性(請注意:prototype是函數的內置屬性,__proto__是對象的內置屬性),是JS內部使用尋找原型鏈的屬性,用于調試
用chrome和FF都可以訪問到對象的__proto__屬性,IE不可以。
this
this指當前對象
1、在函數外使用,this指向window
2、在函數內使用
(1)函數直接被調用
(function fn(){console.log(this)})();
(2)被事件所調用,并且以賦值的形式出現(這兩個條件缺一不可)
誰調用了函數,this就指向誰
AJAX請求
$.ajax({
? ? ? type: 'GET', ? ? ? ? ? ? ?// 這是請求的方式 可以是GET方式也可以是POST方式, 默認是GET
? ? ? url: ' xxx.php ', ? ? ? ? ?// 這是請求的連接地址 一般情況下這個地址是后臺給前端的一個連接,直接寫就可以
? ? ? dataType: 'json', ? ? ? // 這是后臺返回的數據類型 一般情況下都是一個json數據, 前端遍歷一下就OK
? ? ? data: { ? ? ? // 要傳遞的參數? 'xxx' : 'xxx', },
? ? ? success: function (data) { // 發送請求成功后開始執行,data是請求成功后,返回的數據 },
? ? ? error: function (xhr, textStatus, errorThrown) { ? ? ? //? 請求失敗后就開始執行,請求超時后,在這里執行請求超時后要執行的函數 }
? ? ? async: true, ? ? ? ? ? ? ? // 默認為true,默認為true時,所有請求均為異步請求,如果需要發送同步請求,需設置為false,
? ? ? timeout: 8000, ? ? ? ? ?// 設置請求超時時間(毫秒)。此設置將覆蓋全局設置
? ? ? beforeSend: function () { ? ? ? // 在發送請求前就開始執行 (一般用來顯示loading圖)? },
? ? ? complete: function () { ? ? ? //當請求完成后開始執行,無論成功或是失敗都會執行 (一般用來隱藏loading圖) },
}).done(function () { ? ? ?// 這個函數是在ajax數據加載完之后,對數據進行的判斷,在涉及到對ajax數據進行操作無效時,在這個函數里面寫是可以起到效果的
}