奇奇怪怪的Javascript
本文最后更新于:2023年8月7日 凌晨
Javascript是最好的语言(滑稽.jpg
浮点数精度
navigator.onLine
真的可以实现断网检测吗?
摘录自红宝书:浏览器会跟踪网络连接状态并以两种方式暴露这些信息:连接事件和navigator.onLine
属性。在设备连接导网络时,浏览器会记录这个事实并在window
对象上触发online
事件。相应地,断开网络连接后,浏览器会在window
对象上触发offline
事件。任何时候,都可以通过navigator.onLine
属性来确定浏览器的联网状态。这个属性返回一个布尔值,表示浏览器是否联网。
哦吼!那我们直接利用他们不就达到想要的效果了吗?
红宝书后面补充了这么一句话:到底怎么才算联网取决于浏览器与系统实现。有些浏览器可能会认为只要连接到局域网就算”在线”,而不管是否真正接入了互联网。
这么说来,这玩意还是不靠谱。看浏览器具体实现,那我还不如拿头去给你断网检测。回到重点,我对谷歌和火狐进行了同样的尝试,发现两者表现一致。能在网线拔掉和插入的时候触发相应事件,但我没有对有线连接局域网这一方式进行尝试。另外我发现在无线网络的条件下,断开连接网络貌似不会触发事件,真的是越来越奇怪了
由于websocket断网时有超时断开,所以最后我断网检测利用的是ws中open和close事件实现,其中websocket有实现心跳机制
时间戳真的是准确的吗?
利用new Date().getTime()
去获取一个最新的时间戳,实际上它跟系统的时间设置有关。假设用户的时间并不准确,对于一些基于时间戳的逻辑操作而言,是存在非常大的隐患的。举例来说,一个用时间戳判定实现的倒计时器,是可以通过修改系统时间来实现延长时间的这么一个功能;基于时间戳实现的节流操作,会出现时间戳的差为负数的情况,导致节流失效并烂掉
那么,我们修改了系统时间,他就会立刻反应到浏览器上的吗?
经过我的尝试,谷歌浏览器应该是在系统到达新的一分钟的时候会更新到浏览器上(简单尝试,不保证如此