標籤:logs undefined style function cti 事件 pre com man
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‘);
列印出來結果分別是:yes、no、no。
在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知識點