用Math.Pi计算不会抛出错误?

时间:2011-12-18 15:29:28

标签: javascript html5-canvas

我正在编写一些画布代码来绘制圆圈,但它从未被绘制过。最后我发现这是因为我输入了Math.Pi而不是Math.PI

在Chrome开发者工具中,我可以看到Math.Piundefined,但它从未引发任何异常。这是Chrome中的错误还是在undefined上进行计算实际上是合法的?

这是我的代码:

ctx.save();
ctx.lineWidth = 2;
ctx.fillStyle = '#FF0000';
ctx.beginPath();
ctx.arc(can.x, can.y, 15, 0, Math.Pi * 2, true);
ctx.fill();
ctx.restore();

ctx是指canvas.getContext("2d");

4 个答案:

答案 0 :(得分:6)

undefined * 2评估为NaN,而canvas 2D context specification表示:

  

除非另有说明,否则对于2D上下文接口,任何使用数值参数的方法调用,其值为无穷大或 NaN值必须忽略

因此,带有ctx.arc参数的NaN调用意味着默认忽略调用(即没有绘制任何内容),而不是抛出错误。

答案 1 :(得分:2)

这是Javascript的工作方式。

虽然引用未声明的变量会引发异常,但访问不存在的变量 属性将返回undefined

alert(window.foo); // alerts 'undefined'
alert(foo); // exception: foo is not defined

请注意,例外的措辞令人困惑。它应该说“未宣布”。

现在,Javascript旨在抛出极少的错误。这就是为什么它可以乘以undefinedAccording to the specs,这将返回NaN

答案 2 :(得分:1)

从技术上讲,这不是错误,但会导致NaN

答案 3 :(得分:1)

Math.Pi未定义。使用未定义的算术运算时,会产生NaN并且不会生成任何异常。因此,使用undefined进行计算是合法的。

var o = {};
var y = o.x + 10; // o.x is undefined and thus y is NaN