如何避免在Javascript中将地址解析为浮点

如何避免在Javascript中将地址解析为浮点,javascript,Javascript,我正在编写分析制表符分隔文档的javascript代码。为了便于搜索,我需要将数字属性转换为浮点。但是,混合字段(如地址)应保持字符串的状态 for(var i2=0;i2<line1.length;i2++){ var test = local[i2]; if(! (typeof test === 'undefined')){ test = test.trim(); }; var parsed = parseFloat(te

我正在编写分析制表符分隔文档的javascript代码。为了便于搜索,我需要将数字属性转换为浮点。但是,混合字段(如地址)应保持字符串的状态

for(var i2=0;i2<line1.length;i2++){
      var test = local[i2];
      if(! (typeof test === 'undefined')){
        test = test.trim();
      };
      var parsed = parseFloat(test);
      if(!isNaN(parsed)){
        if(line1[i2] === "Site Address")
          console.log("Number before:"+local[i2]+" After:"+parsed);
        object[line1[i2]]=parsed;
      }
      else{
        if(line1[i2] === "Site Address")
          console.log("before:"+local[i2]+" After:"+test);
        object[line1[i2]]=test;
      }
    }

有没有一种方法可以在上面没有明确显示为数字的情况下执行此操作?

您可以使用一元
+
运算符:

var parsed = +test;
正如您所发现的那样,
parseFloat()
函数可以处理以有效数字开头,后跟非数字内容的字符串

如果这看起来太“黑客”了,你也可以使用数字构造器:

var parsed = Number( test );

你没有提供太多的测试数据,所以答案可能不是很好。您可以尝试使用正则表达式,这样只有看起来像数字的东西才会被视为数字,例如

var isNum = /^\d+(\.\d+)?$/;
var test  = line1[i2];

parsed = isNum.test(test)? parseFloat(test) : test;

变量“test”最好命名为“item”或“value”或类似的名称。

您能再解释一下这个一元运算符的作用吗?我将同时研究它。@Jackie它强制它的操作数为一个数字。如果操作数是字符串,则表示它将被解析为数字。但是,与
parseInt()
函数不同,字符串必须是一个完全干净的数字-它的结尾不能有垃圾。谢谢,当我使用这个数字(字符串)时,无效的解析仍然会返回NaN吗?@Jackie:我不想听起来粗鲁,但你可以打开浏览器的控制台试试;)控制台是超级方便的游戏和尝试的东西。或只需调用
Number
并将不同的参数传递给它,查看它的行为。@FelixKling感谢您的输入,事实上,我在询问之后和查看响应之前进行了测试。你提出了一个很好的观点,但我认为,如果其他人看的话,明确这些答案也是很好的。我确实尝试了JSFIDLE,但我的console.log请求不起作用(可能是一个节点函数),所以我有点被抛出了。您似乎知道混合字段的位置,为什么不在这些字段上使用
parseFloat()
?因为我不知道哪些字段是哪个字段。维护哪些字段是数字字段、哪些字段是混合字段、哪些字段既不是数字字段似乎非常困难。当我与其他源接口时,字段名也可能会改变。当然
(!(typeof test=='undefined'))
(typeof test!='undefined')更清晰。
var isNum = /^\d+(\.\d+)?$/;
var test  = line1[i2];

parsed = isNum.test(test)? parseFloat(test) : test;