为什么Math.Round从Try .NET中的浏览器打开打印窗口

今天,引起公众注意的是在Try .NET中发现的一个有趣的不合逻辑的错误,该工具旨在将交互式示例嵌入到C#文档中。 您可以在链接上在Github 看到未解决的问题。

给定的代码在执行时(调用Math.Round方法时)而不是预期的结果,突然从浏览器打开打印窗口:

using System; public class Example { public static void Main() { var x = Math.Round(11.1, MidpointRounding.AwayFromZero); } } 


图片

使用错误跟踪和断点,用户发现了此行为的一个据称原因-它被隐藏在mono.js库中。

图片

答案很简单。 显然,有人想在JS中使用自己的print()函数(或将它与console.log混淆),但是由于在范围内找不到该程序,因此该程序调用window.print() ,这实际上应该打开当前窗口的打印窗口。 document-因为window是浏览器中主流的全局对象。

没有立即注意到此后备情况,但是一个用户声称此错误已于去年11月修复

为了避免发生此类错误, create-react-app项目维护了一个“令人困惑”的浏览器全局变量列表 ,因为产生类似的错误非常简单:

 handleClick() { //   `event` this.setState({ text: event.target.value //    `event`- ! }); } 

Source: https://habr.com/ru/post/zh-CN456880/


All Articles