2015-02-24 12 views
0

假設我有一個字符串(如分數);功能不工作的JavaScript問題(它將小數轉換爲小數)

var num = "1/2"; 

爲什麼這項工作:

var y = num.split(' '); 
if (y.length > 1) { 
    var z = y[1].split('/'); 
    var a = (+y[0] + (z[0]/z[1])); 
    num = a; 
} else { 
    z = y[0].split('/'); 
    if (z.length > 1) { 
     a = (z[0]/z[1]); 
     num = a; 
    } 
} 

alert(num); //The alert box shows my variable now as a decimal. 

這並不:

function parseFractions(x) { 
    var y = x.split(' '); 
    if (y.length > 1) { 
     var z = y[1].split('/'); 
     var a = (+y[0] + (z[0]/z[1])); 
     x = a; 
    } else { 
     z = y[0].split('/'); 
     if (z.length > 1) { 
      a = (z[0]/z[1]); 
      x = a; 
     } 
    } 
} 

parseFractions(num); //Here I call my function. 

alert(num); 
//The alert box does not even show up. The fraction isn't converted into a decimal. 

它基本上是同樣的事情,唯一的區別是,在第二屆一個我試圖把它變成一個函數,所以我不必每次嘗試將分數轉換爲小數時重複這些代碼行。

那麼我做錯了什麼?我正試圖用一個函數來實現嗎?對這個問題的任何亮點表示讚賞!

+0

功能 「按引用傳遞」和「按價值傳遞」。 – epascarello 2015-02-24 20:10:02

+1

如果'alert'沒有顯示出來,則表示運行時錯誤。這可能是一個簡單的問題,如果你[學習如何調試JavaScript],你可以自己解決它(https://developer.mozilla.org/en-US/docs/Debugging_JavaScript)。設置斷點,檢查變量......不難發現代碼中發生了什麼。 – 2015-02-24 20:17:50

+0

'未捕獲的類型錯誤:未定義不是函數'讓我找到那個來源 – Travis 2015-02-24 20:20:47

回答

2

num的值不更新,它不通過引用傳遞。

function parseFractions(x) { 
    var y = x.split(' '); 
    if (y.length > 1) { 
     var z = y[1].split('/'); 
     var a = (+y[0] + (z[0]/z[1])); 
     x = a; 
    } else { 
     z = y[0].split('/'); 
     if (z.length > 1) { 
      a = (z[0]/z[1]); 
      x = a; 
     } 
    } 
    return x; 
} 

num = parseFractions(num); //set num with the value return from the method 
alert(num); 
+0

謝謝!這就像一個魅力,也教會了我一些新的東西。這確實是正確的答案。 – wessy 2015-02-24 20:16:54

+0

@wessy:所以我猜想代碼中的註釋'/ /警報框甚至不顯示。「是不正確的。它顯示出來,但你沒有得到你預期的結果。如果你問一個問題,確保你正確地描述了一切。 – 2015-02-24 20:20:59

+0

@wessy你應該接受它,如果它是正確的。 – Travis 2015-02-24 20:21:32

0

您需要返回自己的價值

返回添加到您的函數結束

return x; 

ADN然後調用與

alert(parseFractions(num)); //Here I call my function. 
+0

你不需要*這樣稱呼它,看看我的例子。 – Travis 2015-02-24 20:14:43