2012-08-31 57 views
0

昨天我問了哪些問題已被正確回答。現在我想花更多的時間來理解昨天回答的功能。在該函數循環中,在'num'變量中增加了值'7'。我想知道它如何在'num'中增加值。使用jquery的變量循環值

var Arr = [ 'h78em', 'w145px', 'w13px' ] 

function stringToNum(str){ 
    num = 0; 
    for (i = 0; i < str.length; i++) 
    if (str[i] >= '0' && str[i] <= '9') 
     num = num * 10 + parseInt(str[i]); 
    return num; 
} 

alert(stringToNum(Arr[0])); 
​ 

這裏是fiddle

+0

MDAS規則適用你通過10首先乘以NUM添加解析值之前,因此0 * 10 + 78 = 78 – ianace

+0

如果刪除* 10 + parseInt函數(STR [1]);然後警報號它會返回7,我想知道它是如何7傳遞給num變量 – Carlos

回答

2

在給定的代碼,當函數被調用時,如果條件檢查在傳遞的值每串當變量是數字時,執行以下代碼

if (str[i] >= '0' && str[i] <= '9') 
     num = num * 10 + parseInt(str[i]); 

所以在給定的字符串中,第一個數字是7。由於num值是初始爲零num的值將是,

num=(0 *10) + 7 

所以num=7在數的第一次出現。上一個數的第二齣現時ie 8

num的值將是,

num=(7*10)+8 

因此值爲78

+0

非常感謝主席先生。你有非常好的解釋方式。 – Carlos

1

下面這個函數會簡單得多。

function stringToNum(str) { 
    return +str.replace(/\D/g, ''); 
} 

更新:

與您的代碼:

init : num = 0 
met 7: num = 0 * 10 + 7 -> num = 7 
met 8: num = 7 * 10 + 8 -> num = 78 
+0

我不想要新的答案相同,我只是想了解這個 – Carlos

+0

@amit什麼是你不明白的部分? – xdazz

+0

@amit使用正則表達式清除非數字要比遍歷字符串解析每個數字(+1 @xdazz)好得多。它更清潔,一目瞭然更容易理解,並且應該表現更好(當然,隨着字符串增長更長) – nbrooks

1

1次迭代:num = 0; // h

2迭代:num = 0 * 10 + 7; // 7

3次迭代:num = 7 * 10 + 8; // 8

4迭代:num = 78; // e

5迭代:num = 78; // m