Javascript高級程序設(shè)計(jì)

變量、作用域和內(nèi)存問題

基本數(shù)據(jù)類型:簡單的數(shù)據(jù)段僧界,主要是Undefined、Null臭挽、Boolean捂襟、Number和String,按值訪問,可以操作保存在變量中的實(shí)際值欢峰。

引用類型:指可能由多個值構(gòu)成的對象葬荷,引用類型的值是保存在內(nèi)存中的對象涨共,Javascript不允許直接訪問內(nèi)存中的位置,在操作對象時宠漩,實(shí)際是在操作對象引用而不是實(shí)際的對象举反。

動態(tài)屬性差異:只能給引用類型動態(tài)的添加屬性。不能給基本類型添加屬性和方法扒吁。

復(fù)制值差異:基本類型復(fù)制的值相互之間沒有影響火鼻,對象復(fù)制值,是引用類型值雕崩,相當(dāng)于指向內(nèi)存中值的指針魁索,改變其中一個的變量就會影響另一個變量。

傳遞參數(shù):訪問變量有按值和按引用兩種盼铁,而參數(shù)只能按值傳遞

檢測類型 typeof instanceof

執(zhí)行環(huán)境和作用域鏈

當(dāng)執(zhí)行環(huán)境進(jìn)入一個函數(shù)時粗蔚,函數(shù)的環(huán)境就會被推入一個環(huán)境棧中,而在函數(shù)執(zhí)行之后饶火,棧將其環(huán)境彈出鹏控,把控制權(quán)返回給之前的執(zhí)行環(huán)境。

當(dāng)代碼在一個環(huán)境執(zhí)行時會創(chuàng)建一個作用域鏈趁窃,作用域鏈的用途是保證對執(zhí)行環(huán)境有權(quán)訪問的所有變量和函數(shù)的有序訪問牧挣。內(nèi)部函數(shù)可以通過作用域鏈訪問所有的外部環(huán)境,但外部環(huán)境不能訪問內(nèi)部環(huán)境中的任何變量和函數(shù)醒陆。

沒有塊級作用域

垃圾收集

Javascript具有自動垃圾收集機(jī)制瀑构。標(biāo)記清楚和引用計(jì)數(shù)策略,DOM對象與原生javascript對象之間創(chuàng)建的額循環(huán)引用刨摩,DOM將永遠(yuǎn)不會回收寺晌,容易導(dǎo)致內(nèi)存泄漏≡枭玻可以在不使用時呻征,手動斷掉原生javascript與DOM對象的循環(huán),如myObject.element = null; element.someObject = null;

Array.isArray() 確定某個值是不是數(shù)組

數(shù)組排序罢浇,sort()默認(rèn)按升序排列陆赋,默認(rèn)-1,反轉(zhuǎn)排序reverse()

數(shù)組方法:push /pop/unshift/shift ?操作方法concat/splice/lastIndexOf/indexOf 迭代方法every/filter/forEach/map/some,參數(shù)(item嚷闭,index攒岛,array) 歸并方法reduce/reduceRight

正則表達(dá)式,所有原字符都需要轉(zhuǎn)義 包含( [ { \ ^ $ | ) ? * + . ] }

函數(shù)是對象胞锰,函數(shù)名是指針灾锯,要訪問函數(shù)的指針而不執(zhí)行的話,可以去掉函數(shù)執(zhí)行后的圓括號

arguments.callee 指向擁有arguments對象的函數(shù) argments.caller指向調(diào)用當(dāng)前函數(shù)的函數(shù)嗅榕,即外部函數(shù)顺饮,這兩個方法在嚴(yán)格模式下不能使用吵聪。

函數(shù)的屬性和方法

每個函數(shù)都包含兩個屬性:length和prototype, length記錄該函數(shù)希望接收的參數(shù)個數(shù)。arguments.length表示實(shí)際接收的參數(shù)個數(shù)兼雄。

每個函數(shù)都包含兩個非繼承而來的方法:apply() 和 call(),這兩個方法的用途都是在特定的作用域中調(diào)用函數(shù)吟逝,等于設(shè)置函數(shù)體內(nèi)的this對象的值。apply接收兩個參數(shù)君旦,一個是在其中運(yùn)行的作用域澎办,另一個是參數(shù)數(shù)組。

call 與 apply方法作用相同金砍,區(qū)別在于第二個參數(shù)的形式局蚀,call必須逐個列出來。

bind()方法恕稠,會創(chuàng)建一個函數(shù)的實(shí)例琅绅,其this值會被綁定傳到bind()函數(shù)的參數(shù)值。

var sayColor.bind(o);

數(shù)字類型

toFixed() 按照指定的小數(shù)位返回數(shù)值的字符串表示鹅巍。

toExponential()返回指數(shù)表示法(e)參數(shù)表示指定輸出結(jié)果的小數(shù)位數(shù)千扶。

toPrecision(),返回指定有效數(shù)字個數(shù)的十進(jìn)制數(shù)字形式的字符串,如Math.PI.toPrecision(2)骆捧, 3.1.

String類型

chartAt(),接收一個字符位置澎羞,返回對應(yīng)的字符,chartCodeAt()返回的是對應(yīng)位置的字符編碼

slice/substr/substring敛苇。

match(/正則/)妆绞,返回第一項(xiàng)是和整個模式匹配的字符串,之后的每一項(xiàng)保存著捕獲數(shù)組匹配的字符串

search(/正則/)枫攀,返回第一個匹配項(xiàng)的索引狐榔,沒有找到褒搔,則返回-1

replace(/正則或其他/, function(match腋逆,pos, originalText){}),替換咐蚯,$n匹配第n個捕獲數(shù)組的字符串

split(“,”, 2)將字符串分割成數(shù)組把兔,第二個參數(shù)指定字符串的項(xiàng)數(shù)丐怯。

面向?qū)ο蟮某绦蛟O(shè)計(jì)

isPrototypeof() hasOwnProperty()檢測屬性是存在于實(shí)例中還是原型中户辞。

實(shí)例的指針僅指向原型而不指向構(gòu)造函數(shù)。重寫整個原型對象切斷了現(xiàn)有原型與之前任何已經(jīng)存在的對象之間的聯(lián)系卧抗,他們引用的依然是最初的原型藤滥。重新部分不會。

構(gòu)造函數(shù)問題:函數(shù)在每個實(shí)例中創(chuàng)建颗味,或函數(shù)在全局中創(chuàng)建不合適。

原型對象問題:對包含引用類型值的屬性來說牺弹,任何實(shí)例的修改都會反映在所有實(shí)例上浦马。

組合使用構(gòu)造函數(shù)和原型模式:構(gòu)造函數(shù)用于定義實(shí)例屬性时呀,而原型模式用于定義方法和共享屬性。

借用構(gòu)造函數(shù):call,apply,可以在子類型構(gòu)造函數(shù)中向超類型傳遞參數(shù)晶默,問題同構(gòu)造函數(shù)谨娜。

組合繼承:使用原型鏈實(shí)現(xiàn)對原型屬性和方法的繼承,通過借用構(gòu)造函數(shù)實(shí)現(xiàn)對實(shí)例屬性的繼承磺陡。問題在于會調(diào)用兩次超類型構(gòu)造函數(shù)

function SupType(name, age) {

//繼承屬性

SuperType.call(this, name);

this.age = age;

}

原型式繼承:借助原型在已有對象和上創(chuàng)建對象趴梢。

function object(o) {//規(guī)范后為Object.create()

function F() {};

F.prototype = o;

return new F();

}

寄生組合式繼承:借用構(gòu)造函數(shù)來繼承屬性,通過原型鏈的混成形式來繼承方法币他,不必為了之類的原型而調(diào)用超類的構(gòu)造函數(shù)坞靶。

function inheritPrototype(subType, superType) {

var prototype = Object(superType.prototype);//創(chuàng)建超類型原型副本

prototype.constructor = subType;//增強(qiáng)對象

subType.prototype = prototype;//指定對象

}

其他

Math.min(1, 2, 3, 4)

數(shù)組借用Math方法

var arr = [1, 2, 3, 4]

var min = Math.min.apply(Math, arr)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蝴悉,隨后出現(xiàn)的幾起案子彰阴,更是在濱河造成了極大的恐慌,老刑警劉巖拍冠,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尿这,死亡現(xiàn)場離奇詭異,居然都是意外死亡庆杜,警方通過查閱死者的電腦和手機(jī)射众,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晃财,“玉大人叨橱,你說我怎么就攤上這事⊥厝埃” “怎么了雏逾?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長郑临。 經(jīng)常有香客問我栖博,道長,這世上最難降的妖魔是什么厢洞? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任仇让,我火速辦了婚禮,結(jié)果婚禮上躺翻,老公的妹妹穿的比我還像新娘丧叽。我一直安慰自己,他們只是感情好公你,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布踊淳。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪迂尝。 梳的紋絲不亂的頭發(fā)上脱茉,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機(jī)與錄音垄开,去河邊找鬼琴许。 笑死,一個胖子當(dāng)著我的面吹牛溉躲,可吹牛的內(nèi)容都是我干的榜田。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼锻梳,長吁一口氣:“原來是場噩夢啊……” “哼箭券!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起唱蒸,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤邦鲫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后神汹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體庆捺,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年屁魏,在試婚紗的時候發(fā)現(xiàn)自己被綠了滔以。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡氓拼,死狀恐怖你画,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情桃漾,我是刑警寧澤坏匪,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站撬统,受9級特大地震影響适滓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜恋追,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一凭迹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧苦囱,春花似錦嗅绸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春蚀狰,著一層夾襖步出監(jiān)牢的瞬間漆弄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工造锅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人廉邑。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓哥蔚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蛛蒙。 傳聞我的和親對象是個殘疾皇子糙箍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容