Javascript-parseInt为WebSocket数据返回奇怪的值

Javascript-parseInt为WebSocket数据返回奇怪的值,javascript,websocket,parseint,Javascript,Websocket,Parseint,我在使用parseInt()时出现了一些奇怪的行为 第一个警报输出:100:100-这是从服务器发送的字符串 第二个警报输出:lat:“100”lon:“100”-这很好 但是,第三个警报输出:lat:1 lon:NaN 这是什么原因造成的 更新: 问题是服务器端的编码生成了一些不可见的不需要的字符。我更新了服务器代码,问题就解决了 我的猜测是,在您的数据中存在不可打印的字符,如空格、制表符等,这就是为什么拆分后会出现NaN 您可以使用regex获取以下数据。使用这种方式,您不必担心不可打印的字

我在使用parseInt()时出现了一些奇怪的行为

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

第二个警报输出:lat:“100”lon:“100”-这很好

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

这是什么原因造成的

更新:


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

我的猜测是,在您的数据中存在不可打印的字符,如空格、制表符等,这就是为什么拆分后会出现
NaN

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

var raw='100:100';
var数据=原始匹配(/\d+/g);
var x=parseInt(数据[0],10);
var y=parseInt(数据[1],10);

document.write('x='+x+'y='+y)我同意@Tushar。因此,belive在
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>

var raw='100:100asd';
var数据=原始匹配(/[0-9]+/gm);
警报(原始);//控制台日志(原始);
var数据=原始分割(“:”);
警报(“纬度:\”“+数据[0]+”\“长:\”“+数据[1]+”\”);
var x=parseInt(数据[0]);
var y=parseInt(数据[1]);
警报(“纬度:+x+”经度:+y”);

我很想知道。。。这将是一件我们甚至没有想到的愚蠢的事情:d可能是一些字符,比如空格,第二个数据中看不到的制表符无法复制:如果这样做会发生什么:
var x=parseInt(data[0])|0?您的浏览器是什么?:)这给了我一个单位数数组。数据[0]=1数据[1]=0数据[2]=0数据[3]=1数据[4]=0数据[5]=0@user2667737检查答案中的演示。请将您在
raw
中获得的数据添加到似乎有效的问题中,但不能使用
event.data
。。它给出:“x=1 y=0”。但我认为你说得有道理,似乎有看不见的角色
event.data.length
返回14,而打印输出仅为7个字符。14个字符?然后修剪
raw
变量:
raw.trim()
。您能否提供从中获取2个数据的完整url?服务器当前正在本地运行。我怀疑那边出了什么问题。以下是用于从服务器发送字符串的代码(用c#编写):基于本文中的代码:感谢您的帮助,但我无法使用
raw=event.data
。。我现在试图从计算机上访问该网页,
alert(event.data)
给了我“100:100”(由于某种原因,Android浏览器不输出“空格”,也不输出
document.write
)。这就解释了为什么长度是14——每个数字之间都有一些东西。我试图用
raw.replace(//g',)替换所有空格,但空格仍然存在,这意味着它们可能是其他东西。@user2667737我明白了。您仍然可以尝试将此替换为
raw.replace(/[^\w\s]/gi,”)
,因为我非常确定在响应之间有一些unicode:),只是为了澄清:插入符号(^)是集合[…]的否定,gi表示全局且不区分大小写,本例中的安全列表是数字、单词字符、下划线(\w)和空格(\s)。
<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>