使用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” - 这很好
但是,第三个警报输出:lat:1 lon:NaN
是什么导致这种情况?
更新
问题是服务器端的编码会产生一些不可见的不需要的字符。我更新了服务器代码,问题就消失了。 Working solution
答案 0 :(得分:0)
我的猜测是,您的数据中有不可打印的字符,例如空格,制表符等,这就是您在分割后获得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
字符串中选择所有数字。
答案 1 :(得分:0)
我同意@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>