一、數(shù)據(jù)類型以及變量
1.1、Number:JavaScript不區(qū)分整數(shù)和浮點(diǎn)數(shù),統(tǒng)一用Number表示;
1.2、字符串;
1.3、布爾值:可以直接用true、false表示布爾值,也可以通過布爾運(yùn)算(&&—與運(yùn)算,||—或運(yùn)算,!—非運(yùn)算)計(jì)算出來;
1.4、比較運(yùn)算符,需要特別注意的有以下幾點(diǎn):
? ? ? ? 1.4.1、==比較,它會自動轉(zhuǎn)換數(shù)據(jù)類型再比較,很多時(shí)候,會得到非常詭異的結(jié)果;
? ? ? ? 1.4.2、===比較,它不會自動轉(zhuǎn)換數(shù)據(jù)類型,如果數(shù)據(jù)類型不一致,返回false,如果一致,再比較(一般建議堅(jiān)持使用===比較);
? ? ? ? 1.4.3、有一個(gè)個(gè)例:NaN===NaN;// false,所以,對于NaN比較的方法是 isNaN(NaN);//true;
? ? ? ? 1.4.4、浮點(diǎn)數(shù)在運(yùn)算過程中會產(chǎn)生誤差,因?yàn)橛?jì)算機(jī)無法精確表示無限循環(huán)小數(shù)。要比較兩個(gè)浮點(diǎn)數(shù)是否相等,只能計(jì)算它們之差的絕對? ??????????????????????值,看是否小于某個(gè)閾值:(注:Math.abs() 方法可返回?cái)?shù)的絕對值)
? ? ? ? ? ? ? ? ? ? ? ?eg:? ?1/3=== (1-2/3);//false
? ??????????????????????????????Math.abs(1/3- (1-2/3)) <0.0000001;//true
? ??????1.4.5、null和undefined:
? ??????????????????null表示一個(gè)“空”的值,它和0以及空字符串''不同,0是一個(gè)數(shù)值,''表示長度為0的字符串,而null表示“空”;
? ??????????????????undefined表示值未定義,大多數(shù)情況下,我們都應(yīng)該用null,undefined僅僅在判斷函數(shù)參數(shù)是否傳遞的情況下有用。
1.5、數(shù)組:數(shù)組是一組按順序排列的集合,集合的每個(gè)值稱為元素,JavaScript的數(shù)組可以包括任意數(shù)據(jù)類型;
1.6、對象:JavaScript的對象是一組由鍵-值組成的無序集合;
1.7、strict模式:如果一個(gè)變量沒有通過var申明就被使用,那么該變量就自動被申明為全局變量;為了避免這一缺陷,所有的JavaScript代碼都? ??????????應(yīng)該使用strict模式;eg:'use strict';
二、字符串
2.1、轉(zhuǎn)義字符\可以轉(zhuǎn)義很多字符,比如\n表示換行,\t表示制表符,字符\本身也要轉(zhuǎn)義,所以\\表示的字符就是\;
2.2、需要特別注意的是:字符串是不可變的,如果對字符串的某個(gè)索引賦值,不會有任何錯(cuò)誤,但是,也沒有任何效果;
2.3、toUpperCase:toUpperCase()把一個(gè)字符串全部變?yōu)榇髮懀?/b>
2.4、toLowerCase:toLowerCase()把一個(gè)字符串全部變?yōu)樾懀?/b>
2.5、indexOf:indexOf()會搜索指定字符串出現(xiàn)的位置;
2.6、substring:substring()返回指定索引區(qū)間的子串;
? ? ? ? eg: var s ='hello,? world';
????????????s.substring(0,5);// 從索引0開始到5(不包括5),返回'hello'
????????????s.substring(7);// 從索引7開始到結(jié)束,返回'world'
三、數(shù)組
3.1、length:獲取Array長度,注意:
? ? ? ? 3.1.1、直接給Array的length賦一個(gè)新的值會導(dǎo)致Array大小的變化:
? ? ? ? ? ? ? ? ? ? ? ??

????????????3.1.2、如果通過索引賦值時(shí),索引超過了范圍,同樣會引起Array大小的變化:

3.2、indexOf:indexOf()搜索一個(gè)指定的元素的位置;
3.3、slice:slice()就是對應(yīng)String的substring()版本,它截取Array的部分元素,然后返回一個(gè)新的Array;
? ? ? ? 3.3.1、slice()的起止參數(shù)包括開始索引,不包括結(jié)束索引:
? ??????????????????

? ? ? ? 3.3.2、不給slice()傳遞任何參數(shù),它就會從頭到尾截取所有元素。利用這一點(diǎn),可以復(fù)制一個(gè)Array:
? ??????????????????

? ? ? ? ? ? ? ? ? ? ? ? ? 比較兩個(gè)數(shù)組是否相等:可以將數(shù)組轉(zhuǎn)成string比較
? ??????????????????????????

3.4、push和pop:push()向Array的末尾添加若干元素,pop()則把Array的最后一個(gè)元素刪除掉:
? ??????

3.5、unshift和shift:unshift()往Array的頭部添加若干元素,shift()方法則把Array的第一個(gè)元素刪掉:

?3.6、sort:sort()可以對當(dāng)前Array進(jìn)行排序,它會直接修改當(dāng)前Array的元素位置,直接調(diào)用時(shí),按照默認(rèn)順序排序:

3.7、reverse:reverse()把整個(gè)Array的元素反轉(zhuǎn):

3.8、splice:splice()方法是修改Array的“萬能方法”,它可以從指定的索引開始刪除若干元素,然后? ??????????????????????????再從該位置添加若干元素:

3.9、concat:concat()方法把當(dāng)前的Array和另一個(gè)Array連接起來,并返回一個(gè)新的Array
? ??????????????????????concat()方法并沒有修改當(dāng)前Array,而是返回了一個(gè)新的Array

? 3.10、join:join()方法把當(dāng)前Array的每個(gè)元素都用指定的字符串連接起來,然后返回連接后的字符串

四、對象
4.1、JavaScript的對象是動態(tài)類型,可以自由地給一個(gè)對象添加或刪除屬性

4.2、如果要檢測對象是否擁有某一屬性,可以用in操作符,不過要小心,如果in判斷一個(gè)屬性存在,這個(gè)屬性不一定是對象的,它可能是繼承得? ?????????到的,

? ??????因?yàn)閠oString定義在object對象中,而所有對象最終都會在原型鏈上指向object,所以object也擁有toString屬性
4.3、要判斷一個(gè)屬性是否是對象自身擁有的,而不是繼承得到的,可以用hasOwnProperty()方法

五、循環(huán)
5.1、for循環(huán)的3個(gè)條件都是可以省略的,如果沒有退出循環(huán)的判斷條件,就必須使用break語句退出循環(huán),否則就是死循環(huán)

5.2、for ... in:可以把一個(gè)對象的所有屬性依次循環(huán)出來

? ? ? ? 5.2.1、要過濾掉對象繼承的屬性,用hasOwnProperty()來實(shí)現(xiàn):

????????5.2.2、由于Array也是對象,而它的每個(gè)元素的索引被視為對象的屬性,因此,for ... in循環(huán)可以直接循環(huán)出Array的索引(得到的是String而不是Number)

5.3、while:忽略了條件的for循環(huán)容易讓人看不清循環(huán)的邏輯,此時(shí)用while循環(huán)更佳,while循環(huán)只有一個(gè)判斷條件,條件滿足,就不斷循環(huán),條件不滿足時(shí)則退出循環(huán)

5.4、do ... while:和while循環(huán)的唯一區(qū)別在于,不是在每次循環(huán)開始的時(shí)候判斷條件,而是在每次循環(huán)完成的時(shí)候判斷條件

????????????用do { ... } while()循環(huán)要小心,循環(huán)體會至少執(zhí)行1次,而for和while循環(huán)則可能一次都不執(zhí)行。
5.5、循環(huán)的注意點(diǎn):
? ? ? ? 5.5.1、做循環(huán)時(shí)要特別注意死循環(huán)的問題,是適時(shí)要退出循環(huán);
? ? ? ? 5.5.2、循環(huán)代碼,務(wù)必小心初始條件和判斷條件,尤其是邊界值;
? ? ? ? 5.5.3、效率:do..while>while>foreach>for>for..in(forEach()方法是ES5.1標(biāo)準(zhǔn)引入的,在第六點(diǎn)說明)