# 奇奇怪怪的Javascript

> 奇奇怪怪的Javascript

- 发布于：2020-11-18
- 更新于：2020-11-18
- 分类：学习
- 标签：前端
- 原文：https://chanx.tech/blog/weird-javascript

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