Javascript 用数学计算。Pi不会抛出错误吗?

Javascript 用数学计算。Pi不会抛出错误吗?,javascript,html5-canvas,Javascript,Html5 Canvas,我写了一些画布代码来画一个圆圈,但它从来没有被画过。最后我发现是因为我输入了Math.Pi而不是Math.Pi 在Chrome开发工具中,我可以看到Math.Pi是未定义的,但它从未抛出任何异常。这是Chrome中的一个bug,还是在未定义的上进行计算实际上是合法的 这是我的密码: ctx.save(); ctx.lineWidth = 2; ctx.fillStyle = '#FF0000'; ctx.beginPath(); ctx.arc(can.x, can.y, 15, 0, Math

我写了一些画布代码来画一个圆圈,但它从来没有被画过。最后我发现是因为我输入了
Math.Pi
而不是
Math.Pi

在Chrome开发工具中,我可以看到
Math.Pi
未定义的
,但它从未抛出任何异常。这是Chrome中的一个bug,还是在
未定义的
上进行计算实际上是合法的

这是我的密码:

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”)

未定义*2
的计算结果为
NaN
,并表示:

除非另有规定,对于2D上下文接口,任何带有数值参数(其值为无穷大或NaN值)的方法调用都必须忽略


因此,参数为
NaN
ctx.arc
调用意味着该调用被静默忽略(即不绘制任何内容),而不是抛出错误。

从技术上讲,这不是错误,但会导致
NaN
Math.Pi
未定义。当对未定义的进行算术运算时,它会导致
NaN
,并且不会生成任何异常。因此,在未定义的情况下进行计算是合法的

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

这就是Javascript的工作方式

引用未声明的变量时引发异常,访问不存在的 属性将返回未定义的

alert(window.foo); // alerts 'undefined'
alert(foo); // exception: foo is not defined
请注意,异常的措辞令人困惑。它应该说“未申报”

现在,Javascript被设计为抛出很少的错误。这就是为什么可以用未定义的
相乘的原因,这将返回
NaN