JavaScript核心概念及實(shí)踐
基本概念
數(shù)據(jù)類型
- 基本:
string, number, boolean, object, null, undefined
. - 對(duì)象:
array,function,object
. - 轉(zhuǎn)換. 對(duì)象類型->數(shù)組. 通過
valueOf()
方法取得對(duì)象值,和上下文匹配則使用. 如果取不到,則toString()
. - 類型推斷:
instanceOf
判斷是否類型,譬如typeof handle=="function" typeof array =="object"
等,[]
識(shí)別成object
,如果需要判斷是不是數(shù)組, 或者對(duì)象是不是具體對(duì)象, 使用array instanceof Array
方式.
變量
- 值傳遞和引用傳遞(傳遞引用地址): 對(duì)象類型是引用類型, 修改后改變. 譬如
var obj = [1,2,3]; var obj2 = obj; obj.push(4);
obj2 也會(huì)受到影響. - 作用域提升. 函數(shù)體內(nèi)聲明, 無論在哪里, 都會(huì)造成整個(gè)函數(shù)體一開始就對(duì)改函數(shù)聲明.
運(yùn)算符
-
== ===
前者會(huì)自動(dòng)轉(zhuǎn)換后匹配相同, 后者引用類型, 必須引用同一個(gè)地址才能判斷相同. 同前面valueOf
的例子, 如果對(duì)象重載了方法,包含很對(duì)對(duì)象, 和另一個(gè)對(duì)象只是在toString()
時(shí)相同, 通過==
是可以返回==
的, 使用===
可以確保二者不是同一個(gè)對(duì)象, 立馬返回false
.
對(duì)象/函數(shù)/數(shù)組
- 變量即window屬性. (瀏覽器中) 如
var m = "global ; window.m = "global"
二者是相同的 -
arguments
參數(shù). -
詞法作用域. --無論在何處聲明,都是提升至函數(shù)開始. - 執(zhí)行上下文.
call apply
-
length
屬性針對(duì)數(shù)組, 對(duì)于stack["first"] = "first"
使用方式而言,stack.length == 0
字符串下標(biāo)不影響, 非字符串下標(biāo)可利用length裁剪數(shù)組. -
join concat
連接數(shù)組成字符串, 和連接2個(gè)數(shù)組合并為一. -
slice
取數(shù)組部分不影響原數(shù)組,splice
影響原數(shù)組`. splice裁剪并敷貼第三個(gè)及后續(xù)參數(shù)可增加內(nèi)容. -
for .. in
數(shù)組和remove delete
函數(shù)需要自定義拓展.
閉包
- 循環(huán)體內(nèi)定義函數(shù)引用局部變量, 外部調(diào)用后輸出不符合預(yù)期, 會(huì)產(chǎn)生 閉包數(shù)據(jù), 解決辦法就是聲明的內(nèi)部方法, return 相應(yīng)的函數(shù)體立即執(zhí)行, 減少閉包變量提升.
- 閉包: 自執(zhí)行函數(shù)對(duì)外封閉內(nèi)部方法屬性, 可用作緩存.
- 閉包上下文對(duì)象.
this
的特殊處理
$(function(){
var con = $("div#panel");
this.id = "content";
var self = this;
con.click(function(){
alert(self.id);
})
}
引入self的目的是, 不引入self的情況下, con的click調(diào)用形式閉包, 導(dǎo)致this指向的其實(shí)是panel對(duì)象, 發(fā)生改變, 需要保存我們方法的對(duì)象為this.