最近開始倒回去看js紅寶書啦。這篇是1-5章的一些筆記。對(duì)于我這種之前只看了w3school和自己摸索了一下函數(shù)的人來說還有細(xì)節(jié)需要補(bǔ)全~
1.當(dāng)變量賦值為null時(shí)留拾,typeof返回為object涕侈,如果變量未賦值,返回undefined
2.對(duì)浮點(diǎn)數(shù)進(jìn)行算數(shù)運(yùn)算的時(shí)候會(huì)產(chǎn)生精度不準(zhǔn)秒旋。如0.1+0.2=0.300...00004
這樣會(huì)導(dǎo)致0.1+0.2==0.3
判別式失效约计。(但0.15+0.25不會(huì)出現(xiàn)此問題)。故避免使用0.1+0.2==0.3
這樣的判別式
3.NaN與任何值都不相等迁筛,包括NaN自身煤蚌。對(duì)應(yīng)函數(shù)isNaN(),當(dāng)處理對(duì)象為NaN和不能轉(zhuǎn)化為數(shù)值的參數(shù)(如字符串)時(shí)细卧,返回true
4.非字符轉(zhuǎn)換為數(shù)值:
①Number():將內(nèi)容非數(shù)字的字符串轉(zhuǎn)化為NaN尉桩,null返回0,undefined返回NaN酒甸,空時(shí)返回0
②parseInt():在Number的基礎(chǔ)上魄健,面對(duì)數(shù)字開頭的字符串例如'123abc',轉(zhuǎn)化為“123”,否則為NaN插勤。面對(duì)“22.5”時(shí)轉(zhuǎn)為22(小數(shù)點(diǎn)被作為不可識(shí)別的內(nèi)容)沽瘦。且可以為parseInt()指定第二個(gè)參數(shù),即轉(zhuǎn)換時(shí)使用的進(jìn)制
③parseFloat():在②的基礎(chǔ)上农尖。當(dāng)面對(duì)“22.5.6”時(shí)轉(zhuǎn)為22.5(第二個(gè)小數(shù)點(diǎn)后被視為不可識(shí)別)析恋,且只能轉(zhuǎn)化十進(jìn)制。因而始終忽略先導(dǎo)的0.
5.除了null和undefined,其他的數(shù)據(jù)類型都有.toString()方法盛卡。方法內(nèi)可以設(shè)定參數(shù)來指定轉(zhuǎn)換時(shí)使用的進(jìn)制助隧。當(dāng)不知道數(shù)據(jù)類型是不是null或者undefined時(shí),可以使用.String()方法滑沧。轉(zhuǎn)換后得到"null"與“undefined”
6.對(duì)于&&:
對(duì)于||
7.
==
與===
的區(qū)別在于并村,前者會(huì)將等號(hào)兩邊的內(nèi)容進(jìn)行轉(zhuǎn)化再比較,如‘55’==55為true滓技,后者不經(jīng)過轉(zhuǎn)化直接比較哩牍,則為false;類似的還有null==undefined為true令漂,但是===則為false8.使用for in函數(shù)時(shí)膝昆,循環(huán)的順序是不一定的丸边,而且當(dāng)遍歷的內(nèi)容為null或者undefined時(shí)會(huì)自動(dòng)結(jié)束循環(huán)。
9.break和continue都會(huì)導(dǎo)致從循環(huán)中立即跳出荚孵。但是break會(huì)結(jié)束循環(huán)妹窖。continue只是跳出此次循環(huán),繼續(xù)下一次循環(huán)
10.一種switch的用法收叶,給switch傳遞表達(dá)式true骄呼,因?yàn)槊總€(gè)case都會(huì)返回一個(gè)布爾值。這樣每個(gè)case都會(huì)執(zhí)行滔驾,知道找到匹配的值或者遇到default為止
11.定義函數(shù)的時(shí)候關(guān)于傳遞參數(shù)的問題谒麦,定義時(shí)可以不寫參數(shù),通過arguements數(shù)組調(diào)用哆致。arguements數(shù)組還具有一個(gè)length屬性用來判斷輸入的參數(shù)個(gè)數(shù)
如定義:
function a(){
alert('aaa'+arguements[0]+arguements[1]);
}
調(diào)用時(shí)可以用 a(1,2);使用
12.對(duì)于基本類型值的復(fù)制绕德,一個(gè)變量的改變不會(huì)影響復(fù)制后的變量的值。但是對(duì)于引用類型值的復(fù)制來說摊阀,一個(gè)對(duì)象的改變對(duì)復(fù)制后的對(duì)象造成改變耻蛇。因?yàn)樗麄儍蓚€(gè)變量引用的是同一個(gè)對(duì)象。
13.instanceof用于表示變量是個(gè)什么類型的對(duì)象胞此,用法如
xxx instanceof Array,當(dāng)xxx為Array類型時(shí)返回true臣咖。但是instanceof對(duì)于基本類型值的檢測(cè)無效,會(huì)返回false漱牵,因?yàn)樗麄儾皇菍?duì)象
14.由于一般的sort函數(shù)的比較結(jié)果會(huì)因?yàn)樽址容^而得不到我們想要的結(jié)果夺蛇。當(dāng)我們需要獲得排序結(jié)果時(shí)可以這樣使用:
function compare(value1,value2){
return value1-value2酣胀;
}
array.sort(compare);
15.concat()函數(shù):復(fù)制當(dāng)前數(shù)組并添加內(nèi)容刁赦,生成新數(shù)組。slice()函數(shù):slice(1)表示從位置1開始復(fù)制闻镶,slice(1甚脉,4)表示從位置1開始復(fù)制,到3結(jié)束铆农。16.splice()函數(shù):可以往數(shù)組的中部插入項(xiàng)牺氨。
splice(0,2):分別代表起始位置和刪除的項(xiàng)數(shù)墩剖;
splice(2猴凹,0,‘yellow’岭皂,‘red’):分別代表起始位置郊霎、要?jiǎng)h除的項(xiàng)數(shù)、要插入的項(xiàng)蒲障。
splice方法會(huì)返回一個(gè)數(shù)組,是從原始數(shù)組里刪除的項(xiàng)。
17.indexOf()方法從頭部返回項(xiàng)的位置揉阎,lastIndexOf()從尾部開始查找庄撮,找不到都返回-1。查找過程會(huì)使用===操作符毙籽。方法內(nèi)包含兩個(gè)參數(shù)洞斯,一個(gè)是查找的內(nèi)容,一個(gè)是從哪個(gè)位置查找(可選)
18.迭代方法有5種坑赡,每種方法接受兩個(gè)參數(shù):要在每一項(xiàng)上運(yùn)行的函數(shù)和(可選的)運(yùn)行該函數(shù)的作用域?qū)ο蟆绊憈his的值烙如。傳入這些方法的函數(shù)會(huì)接受三個(gè)參數(shù):數(shù)據(jù)項(xiàng)的值,在數(shù)組中的位置和這個(gè)數(shù)組對(duì)象本身:function(item,index,array){}
19.reduce方法和reduceRight方法都是遍歷數(shù)組毅否,一個(gè)從頭一個(gè)從尾亚铁。reduce(function(prev,cur螟加,Index徘溢,array){ }),四個(gè)參數(shù)分別代表了前一項(xiàng),現(xiàn)在項(xiàng)捆探,索引值和數(shù)組對(duì)象然爆。
20.個(gè)人理解apply()與call():修改函數(shù)的外部環(huán)境,設(shè)置函數(shù)體內(nèi)this對(duì)象的值黍图。call與apply的區(qū)別在于傳入的參數(shù)數(shù)目不同曾雕。call必須將參數(shù)一個(gè)個(gè)列出來。當(dāng)你傳的是數(shù)組是用apply比較好
21.如果使用var num=false助被,這構(gòu)建的是一個(gè)基本數(shù)據(jù)類型剖张。如果使用的var num = new Boolean(false),這構(gòu)建的是一個(gè)對(duì)象,當(dāng)判斷if(num)時(shí)會(huì)返回true恰起,因?yàn)槿魏螌?duì)象轉(zhuǎn)換為布爾型都是true
22.toFixed(*)根據(jù)傳入的數(shù)字對(duì)數(shù)字進(jìn)行處理返回指定的小數(shù)點(diǎn)后位數(shù)