我有这个JS代码:
<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 。
如果我取消注释两条注释行(将新值设置为sideA
和sideB
,则第二个alert
调用也会显示正确的值。
我在做什么/我明白错了?
谢谢。
答案 0 :(得分:1)
如果将C面设置为50,则calc
的公式将返回负数。
请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sqrt
Math.sqrt
返回NaN
作为否定参数。
答案 1 :(得分: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());
&#13;
答案 2 :(得分:0)
calc
会产生一个负数&#34; -382815.5625 &#34;。
所以Math.sqrt( calc )
= NaN。
您提供了对象triangle
属性( sideA = 3 , sideB = 4 , sideC = 5 ),之后你将sideC更改为 50 ,但sideA和sideB仍为3&amp;分别为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()
,这样会更容易使用。