在javascript中将字符串转换为数字

在javascript中将字符串转换为数字,javascript,Javascript,我想解析一个包含经度和纬度的用户输入。我要做的是将字符串强制为数字,保留其符号和小数位数。但我想做的是在用户输入无效时显示一条消息。我应该跟着哪一个 parseFloat(x) 第二 new Number(x) 第三 第四 +x 如果我必须在这两者之间进行选择,我会使用Number(x),因为它不允许拖尾垃圾。(好吧,它“允许”它,但结果是NaN) 也就是说,Number(“123.45气球”)是NaN,但是parseFloat(“123.45气球”)是123.45(作为一个数字) 正如克

我想解析一个包含经度和纬度的用户输入。我要做的是将字符串强制为数字,保留其符号和小数位数。但我想做的是在用户输入无效时显示一条消息。我应该跟着哪一个

parseFloat(x)
第二

new Number(x)
第三

第四

+x
如果我必须在这两者之间进行选择,我会使用
Number(x)
,因为它不允许拖尾垃圾。(好吧,它“允许”它,但结果是
NaN

也就是说,
Number(“123.45气球”)
NaN
,但是
parseFloat(“123.45气球”)
123.45
(作为一个数字)

正如克林先生所指出的,哪一个“更好”取决于你


编辑-啊,你已经添加回了
+x
~-x
。正如我在评论中所写,
+x
相当于使用
Number()
构造函数,但我认为这有点冒险,因为
+
操作符的语法灵活性。也就是说,剪切粘贴很容易引入错误。如果您知道您想要一个整数(32位整数),那么
~~x
表单是很好的。但是,对于lat/long,这可能不是您想要的。

第一个更好。这是明确的,也是正确的。你说你想解析浮点数
~~x
将为您提供一个整数。

要测试
输入是否为数字,请使用以下命令:

function isNumeric(obj){
    return !isNaN( parseFloat(obj) ) && isFinite( obj );
}
要将
字符串
转换为
数字
,请使用
+
,:

一元+运算符还将其操作数类型转换为数字,因为它不进行任何额外的数学运算,所以它是将字符串类型转换为数字的最快方法

因此,总体而言,您可能需要:

if(!isNumeric(inputValue)){
    alert('invalid number');
}else{
    var num = +inputValue;
}

isNumeric
借用自
jQuery

这是我将编写的代码,以重复获取输入,直到获得正确的输入

var d;

do {
    d = prompt("Enter a number");
    d = new Number(d);
} while( isNaN(d) );

document.write( d );

注意:
newnumber(d)
如果任何字符是非数字的,将始终给出
NaN
,而
parseFloat(d)
将忽略尾随的无效字符。

切勿使用
newnumber()
,如果有,则使用
Number()
。这取决于你认为什么样的输入是有效的。例如,
parseFloat
将接受
“123foo”
并返回
123
,但
Number
(或一元数
+
)将返回
NaN
。是的,好的一点是:您可以使用
Number()
构造函数是一个普通的函数。它可能与你所认为的
+x
?@m.abbas相同。它可能相当于
Number()
,但就个人而言,我会远离它,因为它“语法脆弱”(我刚刚编造了这个术语)。不过,这只是我的偏执。真的吗?我喜欢
+
:)这种行为很明确,但它的意思/作用可能并不明显(类似于
~
)。@FelixKling是的,但正如我在修正案中指出的,它让我感到害怕,因为
+
太疯狂了。我想这只是个人的一个怪癖。@Pointy使用
+
的好处在于速度,如我的答案链接所示。明确易读的代码通常更好(除非过于冗长)。像
~~x
这样简洁的黑客行为限制了代码的可读性,除非由于某种原因(比如一个简短的JavaScript编码组件)空间非常有限,否则应该避免使用。在你的情况下,
~~x
甚至不是一个有效的解决方案,因为它给了你一个整数。@Hans Z mmm…而且
~
不会让人困惑吗?我想“混淆”取决于开发人员……我对
parseFloat()
的唯一问题是它忽略了数字后面的非数字字符。因此,仍然可以解析以数字开头但以随机其他字符结尾的字符串,并且它不会是
NaN
。对于某些应用程序,这当然可以。@al0neevenings为什么不试着用几个简单的示例看看呢?只需在JS控制台中编写此代码,或者转到jsfiddle.net进行实验:
parseFloat(“-42.42”)
正如我所说,这将是我个人的偏好,但是
+x
较短,使用它没有什么错。(在括号中使用
(+x)
无论如何都可以解决语法问题,这仍然比
数字(x)
:-)如果你进行
是数字的
测试,那么
+x
的效率将变得毫无意义:)可能转换后的
isNaN(num)
检查更好。@AtesGoral你的建议,没有得到证实(我的意思是,
isNaN
),我发布的内容已经被证明了。所以我会选择可靠的方式。
var d;

do {
    d = prompt("Enter a number");
    d = new Number(d);
} while( isNaN(d) );

document.write( d );