JavaScript 精華一頁紙

JS 自身操作部分


1、數據類型 | 變量定義
動態語言,不需要指定參數的數據類型,也就是說可以任意賦值
數字 | 布爾 | 字符串 | 數組 | 對象

未定義的變量 undefined

undefined 和 null 的區別:undefined 值爲 null,類型爲 undefined,表明未定義;null值爲null,類型爲 object,表明爲空。

字符串和Java類似;數字類型都是 64位,不區分具體類型。
類型轉換
數字 - > 字符串
toString | String()
字符串 -> 數字
parseInt/parseFloat -- 和Java 略有區別的是,如果數字和字母混合,則會截取一段轉換
進制轉換
toString(2/8/16) - 精度

類型檢測 - typeOf 類似 instanceof
如果判斷一個對象是什麼類型 一般 可以使用 constructor 屬性來判斷

eval -- 計算並執行 string 裏面的語句;儘量避免使用,防止惡意代碼;
escape -- 對特殊字符進行編碼

2、對象
三種定義方式,最常用的還是{}方式

var obj = {id:1,name:"aa",fun:function(){}};

可以動態的給對象增加新的屬性和函數;如果需要給已經存在的對象增加函數(比如系統類庫添加方法)
-- 任何類都有prototype屬性,所以添加類方法,只需要給 prototype 增加方法即可 

補充閱讀:原型鏈

對象 this - 在不同位置,代表不同意思,一般是指調用 該函數時的對象

函數對象
和Java一樣值傳遞,可以修改 外部的對象參數值
函數並不檢查隱式參數的任何情況,可以使用 arguments 實現很多功能;調用時,如果參數個數少於函數定義,則其他的都是undefined

function定義對象
Function(para1,para2){
this.para1 = para1;

this.func = function(){
}
}
function myFunction(a,b){ }

call vs apply - 有點像java的反射調用
myFunction.call(obj,a,b); -- 這裏 函數也當成了一個對象,通過對象來調用函數,如果是對象的方法,傳入對象,如果是全局,可以傳入null
myFunction.apply(obj,[a,b]);

數字對象
isNaN - 是否數字 | toFixed() 精度

String對象
indexOf()/charAt/toLowerCase/toUpperCase/length

日期對象 類似於 Java.util.Date
new Date(參數可選 日期|毫秒|年月日等等)
setFullYear / setDate

數組對象
concat 合併兩個 | filter 過濾 | join 把數組轉換成字符串 | [last]indexOf 索引 | map 處理數組的每個元素返回新數組 | push/pop 向尾部增加或者取出 | reverse 反轉| shift 返回第一個並刪除 | slice 選取一部分數組 | some 是否有符合條件的數據 | sort 排序 | splice 添加 | unshift 向數組頭部插入元素 | valueOf 返回數組對象值
-- 這些函數的提供,非常符合函數化特徵,在 scala裏面也大量使用了類似的功能。

正則表達式
new RegExp | /表達式/gim
提供 test exec(返回匹配的字符串) 來進行匹配判斷;另外,字符串替換,match 都採用了正則表達式對象

Math 對象
PI/round/floor/ceil/ranodm/min/max

對象與json的互轉
json.parse
json.stringify

3、邏輯控制
判斷 | 循環 和 java類似(for in 循環java 也支持
運算符 | 表達式 都和 java類似

補充閱讀:for in 循環如果使用在數組中,而數組擴展了prototype原型方法,循環迭代時,有可能迭代到原型方法

4、異常處理
try{

}catch(err){
-- 因爲沒有類型定義,所以只有一個 catch
}
throw

5、提升 (變量和函數)
前面的代碼 可以使用後面聲明的變量|函數;不建議使用,違反正常閱讀習慣

6、嚴格模式

7、自調用函數和閉包
(function(){
var para = aa;
return {
para:para,
func:function
}
})();
首先 是自調用,保證了代碼的執行;其次通過閉包封裝;並返回了一個對象,這樣對模塊進行了封裝;實現了類似class的功能。

HTML DOM 操作


8、元素操作 - document
獲取元素 getElementById/ getElementByTagName / getElementByClassName
父子|兄弟關係 firstChild/lastChild/nextSibling/parentNode /childNodes
屬性 getAttribute/ attributes
可以直接指定屬性操作 element.src = xxx
新增元素 createElement/ createTextNode/ createAttribute / appendChild / insertBefore
刪除/更新元素 replaceChild / removeChild/ setAtrribute

元素屬性 nodeName | nodeValue | nodeType
文本節點有 value沒有name | 普通節點有name 沒有value | 1元素|2屬性|3文本|8註釋|9文檔

這裏有一點和 XML 解析是類似的,就是每個元素節點之間都有 空白文本子節點,就是元素之間的空白?????

9、樣式操作
element.style.xxx = value;
element.className =

10、事件
I、事件類型

a、文檔加載相關(系統框架事件)
onload | onunload | onbort | onerror | onpageshow | onresize | onscroll
b、鼠標事件
onclick | ondbclick | onmouseover | onmouseout | onmousedown | onmouseup | onmouseenter| onmouseleave
c、鍵盤事件
onkeydown | onkeypress | onkeyup
d、表單事件
onchange | onfocus | onblur | onfocusin | onfocusout | oninput | onreset | onsearch | onselect | onsubmit
e、剪貼板 & 打印 & 拖動 & 動畫 & 多媒體 & 過渡 & 其他等等

II、事件模型
a、DOM level 0 的屬性綁定事件
b、DOM level 2的事件註冊派發模型
addEventListener / attachEventListener / removeEventListener
window.addEventListener("resize", function(){
document.getElementById("demo").innerHTML = sometext;
}, 冒泡or捕獲)
事件傳遞有兩種方式:冒泡與捕獲。
事件傳遞定義了元素事件觸發的順序。 如果你將 <p> 元素插入到 <div> 元素中,用戶點擊 <p> 元素, 哪個元素的 "click" 事件先被觸發呢
在 冒泡 中,內部元素的事件會先被觸發,然後再觸發外部元素,即: <p> 元素的點擊事件先觸發,然後會觸發 <div> 元素的點擊事件。
在 捕獲 中,外部元素的事件會先被觸發,然後纔會觸發內部元素的事件,即: <div> 元素的點擊事件先觸發 ,然後再觸發 <p> 元素的點擊事件

III、事件對象
屬性
bubbles 是否冒泡類型 | currentTarget -- 觸發事件的元素 | target -- 觸發事件的元素 | type - 事件類型

方法
preventDefault -- 通知瀏覽器不執行動作(阻止事件冒泡) | stopPropagation -- 不再派發事件

如果是鍵盤/鼠標事件對象,還能獲取 座標、位置、鍵盤字母等等
clientX/Y
screenX/Y

target 和 currentTarget的區別?
如果只是 DOM level 0 很簡單,監聽對象很明確,就是 綁定屬性的這個元素。兩者相同
但如果 使用 addEventListener 時,就會存在 父子容器的情況,如果是 子容器的點擊事件;父容器在監聽 - 冒泡;或者反過來,捕獲,父容器事件,子容器在點擊
target 對應 真實點擊事件的 元素對象
currentTarget 對應 監聽事件的 元素對象

javascript:void(0) 代表的是什麼意思呢?
void 是 JavaScript 中非常重要的關鍵字,該操作符指定要計算一個表達式但是不返回值。一般可以用在鏈接轉菜單|導航時,點擊不跳轉只有其他效果

<a href="javascript:void(0)">單擊此處什麼也不會發生</a>
<a href="javascript:void(alert('Warning!!!'))">點我!</a>

href="#"與href="javascript:void(0)"的區別
# 包含了一個位置信息,默認的錨是#top 也就是網頁的上端。
而javascript:void(0), 僅僅表示一個死鏈接。
在頁面很長的時候會使用 # 來定位頁面的具體位置,格式爲:# + id。
如果你要定義一個死鏈接請使用 javascript:void(0) 。

瀏覽器相關


11、window 對象
window對象 是默認的,所有對象和方法都在 window對象中
Window 對象擁有的屬性
screen 屏幕對象 | location 訪問的url | history 瀏覽歷史 | navigator 瀏覽器 | document 文檔對象

方法
setTimout / setInterval / clearTimeout / clearInterval / setScroll / ...

事件
onlaod or ready
一般 把函數引用 和 HTML的聯結 都放在 window.onload 事件中,否則操作的dom 元素可能還未存在
都是加載完畢。ready 只包括html文檔,但圖片等可能還未加載完;onload是所有的都加載完

12、彈出框
alert | confirm | prompt

13、cookie
document.cookie
不同瀏覽器不能共享 cookie; 判斷瀏覽器是否支持 cookie -- navigator.cookieEnable

原文博客  http://www.likeway.net/?p=20

發佈了23 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章