parseInt返回WebSocket数据的奇怪值

Javascript - parseInt returns strange values for WebSocket data

本文关键字:数据 返回 WebSocket parseInt      更新时间:2023-09-26

在使用parseInt()时,我得到了一些奇怪的行为。

webSocket.onmessage = function (event) {
    var raw = event.data;
    alert(raw);
    var data = raw.split(":");
    alert("lat:'"" + data[0] + "'" lon:'"" + data[1] + "'"");
    var x = parseInt(data[0]);
    var y = parseInt(data[1]);
    alert("lat:" + x + " lon:" + y);
}

第一个警报输出:100:100 -这是从服务器发送的字符串。

第二个警报输出:lat:"100" lon:"100" -没问题

但是,第三个警报输出:l0:1 l0:NaN

是什么原因导致的?

更新:

问题是服务器端的编码产生了一些不可见的不需要的字符。我更新了服务器代码,问题就解决了。工作解决方案。

我的猜测是,在你的数据中有不可打印的字符,如空格,制表符等,这就是为什么你在分裂后得到NaN

您可以使用regex获取如下数据。使用这种方式,您不必担心不可打印的字符,因为regex只选择数字。

var raw = '100:100 ';
var data = raw.match(/'d+/g);
var x = parseInt(data[0], 10);
var y = parseInt(data[1], 10);
document.write('x=' + x + '   y=' + y);

上面的regex将从raw字符串中选择所有的数字。

我同意@Tushar。因此,相信raw = even.data;中正在解析一些特殊字符(尽管在这里不能复制)

下面的代码似乎工作得很好,你可以调整你的代码并测试它:

<script type="text/javascript">
    var raw = '100 :100asd';
    var data = raw.match(/[0-9]+/gm);
    alert(raw); // console.log(raw);
    var data = raw.split(":");
    alert("lat:'"" + data[0] + "'" lon:'"" + data[1] + "'"");
    var x = parseInt(data[0]);
    var y = parseInt(data[1]);
    alert("lat:" + x + " lon:" + y);
</script>