在JavaScript中按NaN打断符

2022-04-14 00:00:00 nan javascript

是否有任何现代浏览器会在NAN传播上引发异常(即对NAN进行乘法或加法),或者可以配置为执行此操作?

静默NaN传播是一个可怕且隐蔽的错误来源,我希望能够及早发现它们,即使是在性能下降的情况下也是如此。


这里有一个use strictjshint等人的示例错误。无法接听:

object = new MyObject();
object.position.x = 0;
object.position.y = 10;

// ... lots of code

var newPosition = object.position + 1; // <- this is an error, and should
                                       //    have been object.position.x
                                       //    however it fails *silently*,
                                       //    rather than loudly

newPosition *= 2;                      // <- this doesn't raise any errors either.
                                       //    this code is actually ok if the
                                       //    previous line had been correct

注意:如果类型推断成功,则类型脚本编译器能够检测到类似上面的错误,即使在JS代码中也是如此。


解决方案

按要求回答问题:

是否有任何现代浏览器会在NAN传播上引发异常(即对NAN进行乘法或加法),或者可以配置为执行此操作?

不。JAVASCRIPT是一种非常宽容的语言,它不在乎你是否想把Math.PI乘以‘马铃薯’(提示:它是NaN)。这只是我们开发人员必须处理的语言的一个缺点(或者好的地方,取决于你的观点)。

解决导致您提出此问题的错误(可能),在对象上使用getter和setter是强制执行此操作的一种可靠方法,还可以防止您犯这样的错误。

相关文章