在使用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>