《Javascript語(yǔ)言精粹》筆記

語(yǔ)法

1.數(shù)字

a. javascript只有一種數(shù)字類(lèi)型谤职,表示64位的浮點(diǎn)數(shù),避免了短整型的溢出問(wèn)題。1和1.0是相等的

b. 一個(gè)數(shù)字字面量有指數(shù)部分领跛,那么字面量的值等于e之前的數(shù)字與10的e之后的數(shù)字的次方相等。所以100===1e2

c. NaN是一個(gè)數(shù)值撤奸,不等于任何值吠昭,包括他自己‰使希可用isNaN(number)檢測(cè)NaN矢棚。

d. Infinity無(wú)窮大

2.字符串

a. 用單引號(hào)或者雙引號(hào),\(反斜線(xiàn))是轉(zhuǎn)義字符府喳,由于Unicode是一個(gè)16位的字符集蒲肋,所以javascript的字符串也是16位的。

b. \u指定數(shù)字字符編碼,如 “A” === "\u0041"

c. 字符串有l(wèi)ength屬性

d. 字符串是不可變的兜粘,但是可以通過(guò)+運(yùn)算創(chuàng)建新的字符串

3.語(yǔ)句

a. switch申窘、while、for和do語(yǔ)句允許有一個(gè)可選的前置標(biāo)簽孔轴,配合break使用剃法。

b. false,null,undefined,空字符串' ? ',數(shù)字0,數(shù)字 NaN都是假路鹰,其他所有值都是真贷洲,包括true,字符串“false”,以及所有的對(duì)象。

c. for in語(yǔ)句晋柱。通常需要檢測(cè)object.hasOwnProperty(variable)來(lái)確定這個(gè)屬性名是該對(duì)象的成員优构,還是來(lái)自于原型鏈。

for(myvar in obj){

if(obj.hasOwnProperty(myvar)){...}

}

4.表達(dá)式

a. typeof 運(yùn)算符產(chǎn)生的值有 'number'趣斤、'string'俩块、'boolean'、'undefined'浓领、'function'和'object'玉凯。數(shù)組或者null,結(jié)果是'object'

對(duì)象

javascript的簡(jiǎn)單數(shù)據(jù)類(lèi)型包含數(shù)字联贩、字符串漫仆、布爾值、null和undefined泪幌。其他所有的值都是對(duì)象盲厌。

一個(gè)對(duì)象字面量就是包圍在一對(duì)花括號(hào)中的零或多個(gè)“名/值”對(duì)。

對(duì)象是“名/值”對(duì)的集合并擁有一個(gè)連到原型對(duì)象的隱藏鏈接。

1.引用

對(duì)象通過(guò)引用來(lái)傳遞,永遠(yuǎn)不會(huì)被復(fù)制眷细。

2.原型

每個(gè)對(duì)象都連接到一個(gè)原型對(duì)象扬卷,并且它可以從中繼承屬性瘸洛。所有通過(guò)對(duì)象字面量創(chuàng)建的對(duì)象都連接到Object.prototype。

原型鏈在更新時(shí)是不起作用的。當(dāng)我們對(duì)某個(gè)對(duì)象作出改變是,不會(huì)觸及該對(duì)象的原型阀湿,原型鏈只有在檢索值的時(shí)候才會(huì)被用到。

原型關(guān)系是一種動(dòng)態(tài)的關(guān)系瑰妄。如果我們添加一個(gè)新的屬性到原型中陷嘴,該屬性會(huì)立即對(duì)所有寄語(yǔ)該原型創(chuàng)建的對(duì)象可見(jiàn)。

function F(){}

F.prototype.a=[1,2];

var f = new F();

f.a.push(3);

F.prototype.a;//[1,2,3]原型被修改

f.a = null;

F.prototype.a;//[1,2,3]原型不變

3.刪除

delete運(yùn)算符可以用來(lái)殺喊出對(duì)象的屬性间坐。如果對(duì)象包含該屬性灾挨,那么該屬性就會(huì)被移除邑退。它不會(huì)觸及原型鏈中的任何對(duì)象。刪除對(duì)象的屬性可能會(huì)讓來(lái)自原型鏈中的屬性透視出來(lái)涨醋。

4.減少全局變量污染

方法一瓜饥、只創(chuàng)建一個(gè)唯一的全局變量。var MYAPP = {};

方法二浴骂、閉包

函數(shù)

1.函數(shù)對(duì)象

對(duì)象字面量產(chǎn)生的對(duì)象連接到Object.prototype。函數(shù)對(duì)象連接到Function.prototype(該源性對(duì)象本身連接到Object.prototype)宪潮。每個(gè)函數(shù)在創(chuàng)建的時(shí)候會(huì)附加兩個(gè)隱藏屬性:函數(shù)的上下文和實(shí)現(xiàn)函數(shù)行為的代碼溯警。

一切對(duì)象都是Object的實(shí)例,一切函數(shù)都是Function的實(shí)例狡相。Object是Function的實(shí)例梯轻,而Function.prototype是Object的實(shí)例。


可見(jiàn)尽棕,Object作為構(gòu)造函數(shù)喳挑,它有prototype屬性指向Object.prototype, 作為實(shí)例對(duì)象, 它有Object.__proto__指向Function.prototype滔悉。Function是構(gòu)造函數(shù)伊诵,它有prototype屬性指向Function.prototype,而Function是函數(shù)回官,從而也是Function的實(shí)例曹宴,所以它有Function.__proto__指向Function.prototype,從而Function.__proto__ === Function.prototype為true歉提。

2.調(diào)用

每個(gè)函數(shù)在調(diào)用是都會(huì)接受兩個(gè)附加參數(shù)笛坦,this和arguments

4種調(diào)用模式:方法調(diào)用模式,函數(shù)調(diào)用模式苔巨,構(gòu)造器調(diào)用模式和apply調(diào)用模式版扩。

方法調(diào)用模式:函數(shù)保存為對(duì)象的一個(gè)屬性,我們稱(chēng)它為一個(gè)方法侄泽。當(dāng)一個(gè)方法被調(diào)用時(shí)礁芦,this被綁定到該對(duì)象

函數(shù)調(diào)用模式:當(dāng)函數(shù)并非是一個(gè)對(duì)象的屬性時(shí),那么他就被當(dāng)做一個(gè)函數(shù)來(lái)調(diào)用蔬顾,此時(shí)this綁定到全局對(duì)象

構(gòu)造器調(diào)用模式:一個(gè)函數(shù)宴偿,如果創(chuàng)建的目的就是希望結(jié)合new前綴來(lái)調(diào)用,就稱(chēng)它為構(gòu)造器函數(shù)诀豁,首字母大寫(xiě)窄刘。調(diào)用之后,實(shí)例對(duì)象的__proto__會(huì)鏈接到構(gòu)造函數(shù)prototype的舷胜,this會(huì)被綁定到新對(duì)象上娩践。

Apply調(diào)用模式:apply方法讓我們構(gòu)建一個(gè)參數(shù)數(shù)組傳遞給調(diào)用函數(shù)活翩。它允許我們選擇this的值。apply接收兩個(gè)參數(shù)翻伺,要綁定給this的值和參數(shù)數(shù)組材泄。call,bind

function Qua(string){this.status = string}

Qua.prototype.get_status = function(){

return this.status;
}

//構(gòu)造一個(gè)包含status的對(duì)象

var statusObject = {status:'A-OK'};

//statusObject并沒(méi)有繼承Qua.prototype,但是可以調(diào)用get_status

var status = Qua.prototype.get_status.apply(statusObject);//傳入this,this指statusObject吨岭。結(jié)果是A-OK

3.參數(shù)

arguments并不是一個(gè)真正的數(shù)組拉宗,它只是一個(gè)類(lèi)似數(shù)組的對(duì)象,擁有l(wèi)ength屬性辣辫,但沒(méi)有任何數(shù)組的方法旦事。

4.閉包

函數(shù)可以訪(fǎng)問(wèn)它被創(chuàng)建時(shí)的所處的上下文環(huán)境。內(nèi)部函數(shù)能訪(fǎng)問(wèn)外部函數(shù)的實(shí)際變量而無(wú)需復(fù)制急灭。

//錯(cuò)誤示例

var add_the_handlers = function(nodes){

? ?var i;

for(i=0;i<nodes.length;i++){

nodes[i].onclick = function(){

alert(i);

}

}

}

//該函數(shù)的本意是想傳遞給每個(gè)事件處理器一個(gè)唯一的i,但是事件處理器函數(shù)綁定了變量i本身姐浮,而不是函數(shù)在構(gòu)造是的變量i的值

//改良版

var add_the_handlers = function(nodes){

var helper = function(i){

return function(e){alert(i)}

}

var i;

for(i=0;i<nodes.length;i++){

nodes[i].onclock=helper(i);//返回當(dāng)前的i值

}

}

方法

1.Array

concat(item,...):如果參數(shù)item是數(shù)組,那么他的每一個(gè)元素會(huì)被分別添加

join(separator):默認(rèn)的separator是逗號(hào)葬馋。

pop():移除數(shù)組中的最后一個(gè)元素并返回該元素卖鲤。如果數(shù)組是empty,那么返回undefined

push(item...):把一個(gè)或多個(gè)參數(shù)item附加到數(shù)組尾部,如果item是數(shù)組畴嘶,會(huì)把item座位整體添加到數(shù)組尾部蛋逾,并返回這個(gè)array的新長(zhǎng)度值。

reverse():反轉(zhuǎn)數(shù)組中的元素順序掠廓,并返回?cái)?shù)組本身[數(shù)組被改變了]换怖。

shift():移除數(shù)組中的第一個(gè)元素并返回該元素,如果是空數(shù)組蟀瞧,返回undefined沉颂。shift通常比pop慢的多。

slice(start,end):對(duì)數(shù)組中的一段做淺復(fù)制悦污。

sort(comparefn):對(duì)數(shù)組中的元素進(jìn)行排序铸屉,不能正確地給一組數(shù)字排序。因?yàn)閖avascript默認(rèn)的比較函數(shù)會(huì)把被排序的元素都視為字符串切端。

splice(start,deleteCount,item...):從數(shù)組中移除一個(gè)或多個(gè)元素彻坛,并用新的item替換他們。

unshift(item...):和push類(lèi)似踏枣,只是他是把item插入到數(shù)組的開(kāi)始部分昌屉,并返回?cái)?shù)組心得length。

2.Function

apply(thisArg,argArray):傳遞一個(gè)綁定到this上的對(duì)象和一個(gè)可選的數(shù)組作為參數(shù)茵瀑。

3.Number

toExponential(fractionDigits):傳換成一個(gè)指數(shù)形式的字符串间驮,可選參數(shù)是控制小數(shù)點(diǎn)后的數(shù)字位數(shù),值必須在0-20.

toFixed(fractionDigits):轉(zhuǎn)換成一個(gè)十進(jìn)制形式的字符串马昨,可選參數(shù)是控制小數(shù)點(diǎn)后的數(shù)字位數(shù)竞帽,值必須在0-20扛施,默認(rèn)值是0

toPrecision(precision):轉(zhuǎn)換成一個(gè)十進(jìn)制數(shù)形式的字符串∫俾ǎ可選參數(shù)是控制數(shù)字的精度[和控制小數(shù)點(diǎn)位數(shù)是不一樣的疙渣,從整數(shù)部分算起],值必須在0-21

toString(radix):轉(zhuǎn)成字符串堆巧⊥螅可選參數(shù)radix控制基數(shù),值在2-36之間恳邀,常用的是整數(shù)懦冰,但是可以用任意的數(shù)字。在最普通的情況下number.toString()可以簡(jiǎn)單寫(xiě)成String(number)谣沸。

4.Object

hasOwnProperty(name):如果一個(gè)object包含一個(gè)名為name的屬性,那么hasOwnproperty返回true笋颤。原型鏈中的同名屬性是不會(huì)被檢查的乳附。

var a = {member:true};
var b = Object.create(a);

a.hasOwnproperty('member');//true

b.hasOwnproperty('member');//false

b.member;//true

5.RegExp

regexp.exec(string):是使用正則表達(dá)式最強(qiáng)大(和最慢)的方法。匹配成功會(huì)返回一個(gè)數(shù)組伴澄。下標(biāo)為0的是包含正則表達(dá)式regexp匹配的子字符串赋除,下標(biāo)為1的元素是分組1捕獲的文本...以此類(lèi)推,如果匹配失敗非凌,返回null举农。

regexp.test(string):最近單和最快的方法。盡量不要對(duì)這個(gè)方法使用g標(biāo)識(shí)敞嗡。返回true或false

6.String

string.charAt(pos):返回string中pos位置的字符颁糟。如果pos小于0或大于等于字符串的長(zhǎng)度,返回空字符串喉悴。

string.charCodeAt(pos):返回string中pos位置處的字符的字符碼位棱貌。如果pos小于0或大于等于字符串的長(zhǎng)度,返回空NaN

string.concat(string...)

string.indexOf(searchString,position):查找子串的位置

string.lastIndexOf(searchString,position):從末尾開(kāi)始查找,但是position是從前往后數(shù)

var text = 'Mississippi';

text.lastIndexOf('ss');//5

text.lastIndexOf('ss',3);//原始string變成Miss ? 結(jié)果是2

text.lastIndexOf('ss',6);//原始串變成Mississ ?結(jié)果是5

string.localeCompare(that):

string.match(regexp):

string.replace(searchValue,replaceValue):只會(huì)替換第一次出現(xiàn)的箕肃,所以一般searchValue是一個(gè)帶有g(shù)標(biāo)識(shí)的正則婚脱,這樣可以替換所有的匹配,如果不帶g勺像,則只會(huì)替換第一個(gè)匹配障贸。

string.search(regexp):參數(shù)是正則表達(dá)式,且會(huì)忽略g標(biāo)識(shí)

string.slice(start,end):復(fù)制string的一部分出來(lái)構(gòu)造一個(gè)新的字符串吟宦。如果start/end是負(fù)數(shù)篮洁,會(huì)與string.length相加

string.split(separator,limit):separator可以是字符串也可以是正則,limit顯示切片數(shù)量

string.substring(start,end):沒(méi)有任何理由去使用substring方法督函,用slice代替

string.toLocaleLowerCase():返回一個(gè)新的字符串嘀粱,使用本地化的規(guī)則把string中的所有字幕轉(zhuǎn)換為小寫(xiě)格式激挪。此方法主要永在土耳其語(yǔ)上,因?yàn)樵谕炼湔Z(yǔ)中‘I’轉(zhuǎn)換為‘l’,而不是‘i’锋叨。

string.toLocaleUpperCase():轉(zhuǎn)換大寫(xiě)格式垄分,解釋參照toLocaleLowerCase()

string.toLowerCase():

string.toUpperCase():

String.fromCharCode(char...):根據(jù)一串?dāng)?shù)字編碼返回一個(gè)字符串 ?

var a = String.fromCharCode(67,97,116);//a是Cat

毒瘤

1.判斷數(shù)字:var isNumber = function(num){return typeof num === 'number' && isFinite(num);}

2.判斷是數(shù)組的可靠方法:

Object.prototype.toString.apply(arr) === '[object Array]'

Object.prototype.toString.apply(arguments) === '[object Arguments]'//可以判斷arguments數(shù)組不是真正的數(shù)組,只是含有l(wèi)ength屬性而已娃磺,要通過(guò)Array.prototype.slice.apply(arguments)轉(zhuǎn)成數(shù)組

3.對(duì)象:

可以看到薄湿,constructor卻是一個(gè)字符串,原因在于count對(duì)象繼承自O(shè)bject.prototype偷卧,而Object.prototype包含著一個(gè)名為constructor的成員對(duì)象它的值是一個(gè)Object,所以相加就變成了字符串拼接豺瘤。解決辦法是添加一個(gè)判斷typeof count[word] == 'number'

JSON

json有6種類(lèi)型的值,對(duì)象听诸,數(shù)組坐求,字符串,數(shù)字晌梨,布爾值和null桥嗤。空白(空格仔蝌,制表泛领,回車(chē),換行符)可被插入到任意值的前后敛惊。

使用JSON.parse可以代替evel帶來(lái)的風(fēng)險(xiǎn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末渊鞋,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瞧挤,更是在濱河造成了極大的恐慌锡宋,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件皿伺,死亡現(xiàn)場(chǎng)離奇詭異员辩,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)鸵鸥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)奠滑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人妒穴,你說(shuō)我怎么就攤上這事宋税。” “怎么了讼油?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵杰赛,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我矮台,道長(zhǎng)乏屯,這世上最難降的妖魔是什么根时? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮辰晕,結(jié)果婚禮上蛤迎,老公的妹妹穿的比我還像新娘。我一直安慰自己含友,他們只是感情好替裆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著窘问,像睡著了一般辆童。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惠赫,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天把鉴,我揣著相機(jī)與錄音,去河邊找鬼儿咱。 笑死纸镊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的概疆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼峰搪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼岔冀!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起概耻,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤使套,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后鞠柄,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體侦高,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年厌杜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了奉呛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡夯尽,死狀恐怖瞧壮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情匙握,我是刑警寧澤咆槽,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站圈纺,受9級(jí)特大地震影響秦忿,放射性物質(zhì)發(fā)生泄漏麦射。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一灯谣、第九天 我趴在偏房一處隱蔽的房頂上張望潜秋。 院中可真熱鬧,春花似錦酬屉、人聲如沸半等。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)杀饵。三九已至,卻和暖如春谬擦,著一層夾襖步出監(jiān)牢的瞬間切距,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工惨远, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谜悟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓北秽,卻偏偏與公主長(zhǎng)得像葡幸,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子贺氓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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

  • 第5章 引用類(lèi)型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類(lèi)型 使用基本類(lèi)型...
    大學(xué)一百閱讀 3,237評(píng)論 0 4
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法蔚叨,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法辙培,繼承相關(guān)的語(yǔ)法蔑水,異常的語(yǔ)法,線(xiàn)程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,639評(píng)論 18 399
  • 首發(fā)于:segmentfault《JavaScript語(yǔ)言精粹 修訂版》 讀書(shū)筆記 之前看到這篇文章扬蕊,前端網(wǎng)老姚淺...
    若川i閱讀 877評(píng)論 0 3
  • 《紅樓夢(mèng)》中賈政喜歡和清客在一起搀别,只要在家里,身前身后總有一幫人圍繞著尾抑。在《紅樓夢(mèng)》的第十六回作者通過(guò)大觀(guān)園的興建...
    桃花月球閱讀 2,397評(píng)論 4 8
  • ?時(shí)光 不經(jīng)意間 偷走你的記憶 讓你不由自主地 用想象去填補(bǔ)那個(gè)空缺 而你也不會(huì)對(duì)此感到懷疑 記憶的模樣 就像星辰...
    瘦子的逆襲閱讀 169評(píng)論 0 1