Javascript:将字符串转换为数字?

War*_*ica 5 javascript variables

有没有办法将变量从字符串转换为数字?

例如,我有

var str = "1";
Run Code Online (Sandbox Code Playgroud)

我可以改成它吗?

var str = 1;
Run Code Online (Sandbox Code Playgroud)

Fyo*_*kin 12

尝试 str = parseInt( str, 10 )

(注意:第二个参数表示用于解析的基数;在这种情况下,您的数字将被解析为十进制)

尽管如此,在JavaScript中使用术语"类型"非常松散.你能解释为什么你关心变量的类型吗?

  • 始终包括基数. (3认同)
  • 大约晚了十年,但是:使用“parseFloat”而不是“parseInt”。它们产生相同的“Number”,但 parseFloat 将涵盖所有正常用例,而无需基数,或者 if/then 检查只是因为可能有小数点。 (2认同)

Sea*_*sey 8

有三种方法可以做到这一点:

str = parseInt(str, 10); // 10 as the radix sets parseInt to expect decimals
Run Code Online (Sandbox Code Playgroud)

要么

str = Number(str); // this does not support octals
Run Code Online (Sandbox Code Playgroud)

要么

str = +str; // the + operator causes the parser to convert using Number
Run Code Online (Sandbox Code Playgroud)

做出明智的选择 :)


cui*_*ing 5

最好的办法:

var str = "1";
var num = +str; //simple enough and work with both int and float
Run Code Online (Sandbox Code Playgroud)

您还可以:

var str = "1";
var num = Number(str); //without new. work with both int and float
Run Code Online (Sandbox Code Playgroud)

或者

var str = "1";
var num = parseInt(str,10); //for integer number
var num = parseFloat(str); //for float number
Run Code Online (Sandbox Code Playgroud)

不:

var str = "1";
var num = new Number(str);  //num will be an object. typeof num == 'object'
Run Code Online (Sandbox Code Playgroud)

仅在特殊情况下使用 parseInt,例如

var str = "ff";
var num = parseInt(str,16); //255

var str = "0xff";
var num = parseInt(str); //255
Run Code Online (Sandbox Code Playgroud)


T.J*_*der 5

您有多种选择:

  • 一元运算+符: value = +value将使用 JavaScript 引擎的标准规则将字符串强制转换为数字。该数字可以具有小数部分(例如,+"1.50"1.5)。字符串中的任何非数字(e科学记数法除外)都会生成结果NaN。此外,+""is 0,这可能不直观。

    var num = +str;
    
    Run Code Online (Sandbox Code Playgroud)
  • Number功能:value = Number(value)。做同样的事情+

    var num = Number(str);
    
    Run Code Online (Sandbox Code Playgroud)
  • parseInt功能,通常与一个基数(基数): value = parseInt(value, 10)。这里的缺点是parseInt转换它在字符串开头找到的任何数字,但忽略字符串后面的非数字,所以parseInt("100asdf", 10)100,不是NaN。顾名思义,parseInt只解析一个整数。

    var num = parseInt(str, 10);
    
    Run Code Online (Sandbox Code Playgroud)
  • parseFloat功能:value = parseFloat(value)。允许小数值,并始终以十进制(从八进制或十六进制)工作。parseInt对字符串末尾的垃圾做同样的事情,parseFloat("123.34alksdjf")123.34.

    var num = parseFloat(str);
    
    Run Code Online (Sandbox Code Playgroud)

因此,请选择适合您用例的工具。:-)