奇奇怪怪的Javascript

本文最后更新于:2023年8月7日 凌晨

Javascript是最好的语言(滑稽.jpg

浮点数精度

摘录自红宝书:浏览器会跟踪网络连接状态并以两种方式暴露这些信息:连接事件和navigator.onLine属性。在设备连接导网络时,浏览器会记录这个事实并在window对象上触发online事件。相应地,断开网络连接后,浏览器会在window对象上触发offline事件。任何时候,都可以通过navigator.onLine属性来确定浏览器的联网状态。这个属性返回一个布尔值,表示浏览器是否联网。

哦吼!那我们直接利用他们不就达到想要的效果了吗?

红宝书后面补充了这么一句话:到底怎么才算联网取决于浏览器与系统实现。有些浏览器可能会认为只要连接到局域网就算”在线”,而不管是否真正接入了互联网

这么说来,这玩意还是不靠谱。看浏览器具体实现,那我还不如拿头去给你断网检测。回到重点,我对谷歌和火狐进行了同样的尝试,发现两者表现一致。能在网线拔掉和插入的时候触发相应事件,但我没有对有线连接局域网这一方式进行尝试。另外我发现在无线网络的条件下,断开连接网络貌似不会触发事件,真的是越来越奇怪了

由于websocket断网时有超时断开,所以最后我断网检测利用的是ws中open和close事件实现,其中websocket有实现心跳机制

时间戳真的是准确的吗?

利用new Date().getTime()去获取一个最新的时间戳,实际上它跟系统的时间设置有关。假设用户的时间并不准确,对于一些基于时间戳的逻辑操作而言,是存在非常大的隐患的。举例来说,一个用时间戳判定实现的倒计时器,是可以通过修改系统时间来实现延长时间的这么一个功能;基于时间戳实现的节流操作,会出现时间戳的差为负数的情况,导致节流失效并烂掉

那么,我们修改了系统时间,他就会立刻反应到浏览器上的吗?

经过我的尝试,谷歌浏览器应该是在系统到达新的一分钟的时候会更新到浏览器上(简单尝试,不保证如此


奇奇怪怪的Javascript
https://www.chanx.tech/2020/d19ede1c65b8/
作者
ischanx
发布于
2020年11月18日
更新于
2023年8月7日
许可协议