2016-09-26 43 views
1

只改變特定對象字段的值我有這樣的JS代碼:JavaScript的 - 在運行時

<script type="text/javascript"> 

    var triangle = new Object(); 

    triangle.sideA = 3; 
    triangle.sideB = 4; 
    triangle.sideC = 5; 

    triangle. getArea = function() { 
    // Return the area of a triangle using Heron's formula 
    var sp = (this.sideA + this.sideB + this.sideC)/2; 
    var calc = sp * (sp - this.sideA) * (sp - this.sideB) * (sp - this.sideC); 
    return Math.sqrt(calc); 
    }; 

    alert ("area is: " + triangle.getArea()); 

    //triangle.sideA = 30; 
    //triangle.sideB = 40; 
    triangle.sideC = 50; 

    alert ("now area is: " + triangle.getArea()); 

</script> 

首先alert來電顯示正確的值。 第二個alert呼叫顯示NaN

如果我取消這兩個註釋行(設置新值也sideAsideB,那麼第二alert調用也顯示正確的值。

我在做什麼/沒有我理解錯了?

謝謝。

+2

在第二場景中,你沒有三角形。你不能把它建成3,4個50邊。 https://en.wikipedia.org/wiki/Triangle_inequality –

+0

'calc'可能是負值。你不能從負數得到平方根。這個問題與物體無關。 –

+0

事實上,我很專注於JS對象/範圍相關的問題,我只是錯過了這個明顯的事實... – Serban

回答

0

您擁有的公式正試圖計算負數的平方根。我添加了一個額外的警報來顯示你在做什麼。

var triangle = new Object(); 
 

 
    triangle.sideA = 3; 
 
    triangle.sideB = 4; 
 
    triangle.sideC = 5; 
 

 
    triangle. getArea = function() { 
 
    // Return the area of a triangle using Heron's formula 
 
    var sp = (this.sideA + this.sideB + this.sideC)/2; 
 
    var calc = sp * (sp - this.sideA) * (sp - this.sideB) * (sp - this.sideC); 
 
    alert(calc); 
 
    return Math.sqrt(calc); 
 
    }; 
 

 
    alert ("area is: " + triangle.getArea()); 
 

 
    //triangle.sideA = 30; 
 
    //triangle.sideB = 40; 
 
    triangle.sideC = 50; 
 

 
    alert ("now area is: " + triangle.getArea());

+0

明白了,謝謝。我非常專注於測試我學到的關於JS的小東西,所以我完全錯過了一個事實,即不可能有這樣的三角形...... – Serban

0

calc結果爲負號 「-382815.5625」。

因此Math.sqrt(calc) = NaN。

你給你的對象triangle屬性(SIDEA = 3sideB = 4sideC = 5),之後你改變了sideC到,但SIDEA和sideB分別保持3 & 4 。然後我們有

var sp = (3 + 4 + 50)/2; = 28.5 var calc = 28.5 * (28.5 - 3) * (28.5 - 4) * (28.5 - 50); = -382815.5625

當你取消註釋2行,因爲這樣的數量不是否定你的代碼工作。

我建議你在測試你的代碼時使用console.log()和控制檯而不是alert(),它使用起來要容易得多。