1. 程式人生 > >從項目中總結的js知識點

從項目中總結的js知識點

asc 點擊 進行 clas images 打印 知識 做的 cnblogs

1. 數字字符串和數字進行比較可以得出正確結果,卻不能正確判斷是否在一個數字數組中。如以下程序:

var s = ‘8‘, n = 8, arr = [1,2,8,9];
console.log(s==n ? ‘yes‘ : ‘no‘);
console.log($.inArray(s, arr)!=-1 ? ‘yes‘ : ‘no‘);
console.log(arr.indexOf(s)!=-1 ? ‘yes‘ : ‘no‘);

打印出來結果分別是:yesnono

JavaScript中經常會遇到數字字符串,為了防止這種情況的出現,若是用於數字數組判斷,應該使用parseInt()

函數將其轉化為int類型。

2. 使用$.each()函數來遍歷數組的時候,默認下標從0開始連續訪問至數組的最大下標,中間不存在的下標值為”undefined”,且字符串下標元素不會被訪問到。如以下程序:

var arr = [];
arr[1] = 1;
arr[4] = 4;
arr[‘aa‘] = ‘aa‘;
console.log(arr);
$.each(arr, function(i, o) {
        console.log(i, o);
});

打印結果為(數組長度也不正確):

技術分享

3. 在使用了異步請求的程序中,訪問某個數據對象出現”undefined”,一般是異步請求還沒完成,應該在確保異步請求已完成的地方訪問請求得到的數據。

4. html元素綁定的click事件是異步的,點擊之後才會觸發。如果使用循環給多個元素綁定click事件,而click事件的方法中使用的參數值又隨著循環體的叠代而改變,那麽無論點擊哪個元素,觸發的都將是最後一個元素的click事件。這種情況下,可以在需要綁定click事件的元素中自定義一些屬性,把參數的值寫死在裏面,然後在click事件的方法中讀取當前元素的自定義屬性值作為參數值,這樣就可以避免以上問題的出現了。

5. 盡可能減少操作dom的次數。若需要使用字符串拼接生成html元素,可以把所有需要生成的元素都拼接到字符串中,然後一次性寫入dom

6. 能在循環外做的動作就不要放在循環內部了,事件註冊一般都不需要在循環內部。

7. 滾動條滾動不需要計算頁面內容和滾動條之間滾動距離的比例,直接使用頁面內容的滾動距離即可。

8. 一般不要在頁面元素定義太多的id,容易沖突,可以使用元素之間的遍歷關系來定位需要操作的元素。

9. 使用indexOf()函數來判斷一個數組是否包含某個元素其實也是一個循環判斷。

從項目中總結的js知識點