在 Chrome 63 中,WebSocket 连接会出现一个特殊的问题:当服务器向客户端发送一个空消息时,客户端会显示 null。这个问题很容易被忽略,但实际上可能会对应用程序产生一些不良的影响。在本文中,我们将介绍如何使用 ECMAScript 2017 的条件运算符来解决这个问题。
WebSocket 问题的背景
在 WebSocket 协议中,服务器可以向客户端发送空消息,即不包含任何数据的消息。这个特性通常用于心跳检测或其他类似的功能。在 Chrome 63 中,当客户端接收到一个空消息时,它会显示 null。这个问题是由于 Chrome 63 中的 WebSocket 实现在处理空消息时出现了一个 bug。
虽然这个问题看起来很小,但它可能会对应用程序产生一些不良的影响。例如,在某些情况下,应用程序可能会依赖于 WebSocket 连接的状态来做一些决策。如果客户端显示 null,这可能会导致应用程序做出错误的决策。
解决方案
为了解决这个问题,我们可以使用 ECMAScript 2017 的条件运算符(也称为 nullish coalescing operator)。条件运算符是一个新的 JavaScript 运算符,用于测试一个值是否为 null 或 undefined。如果值为 null 或 undefined,条件运算符将返回一个默认值。否则,它将返回原始值。
条件运算符的语法如下:
value1 ?? value2
如果 value1 不为 null 或 undefined,那么条件运算符将返回 value1。否则,它将返回 value2。
我们可以使用条件运算符来测试 WebSocket 消息是否为空,并在为空时返回一个空字符串。这将确保我们的代码不会受到 Chrome 63 中的 WebSocket bug 的影响。
下面是一个示例代码:
const socket = new WebSocket('ws://example.com'); socket.onmessage = function(event) { const message = event.data ?? ''; // Do something with message };
在这个示例中,我们使用条件运算符来测试 event.data 是否为 null 或 undefined。如果 event.data 为空,我们将返回一个空字符串。否则,我们将使用 event.data 的值来做一些决策。
结论
在 Chrome 63 中,WebSocket 连接可能会显示 null,这可能会对应用程序产生一些不良的影响。为了解决这个问题,我们可以使用 ECMAScript 2017 的条件运算符来测试 WebSocket 消息是否为空,并在为空时返回一个空字符串。这将确保我们的代码不会受到 Chrome 63 中的 WebSocket bug 的影响。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/675ff84803c3aa6a56fb3d54