如何在JavaScript中将字符串"01"转换为数字?

8
我想知道在JavaScript中,当数字小于10时,是否可以使用两个数字?
例如:
10、9、8、7、6...转换成 "number 数据类型" 为10、09、08、07、06。
是的,可以将数字以 "string 数据类型" 的形式显示为两位数,当这些数字小于10时。
if(number < 10) {
    console.log(number) //number
    number = "0" + number;
    console.log(number) //string
}

但我希望将其作为数字数据类型使用,这样我就可以使用它。
if(number == 01) {
    //some code here
}

这是可能的吗?


3
在 JavaScript 函数中,为什么要使用 01 而不是 1 呢?我可以理解在显示方面使用这种方式,但在逻辑方面似乎没有必要。 - Shaun Sharples
2
谁不想把数字一用作01呢?这样非常时尚 :P - zer00ne
1
你可以创建一个伪类型,它将返回数字值或字符串值以显示,如果数字小于10,则附加0。然而,这似乎有些过度和低效。简单地说,在显示数字之前,将其通过函数转换为字符串,如果数字小于10,则追加0。 - Neil
4个回答

10

ParseInt语法

参考资料

parseInt(string, radix);

参数

string 要解析的值。如果string不是字符串,则使用ToString抽象操作将其转换为字符串。 字符串中的前导空格将被忽略。

radix 介于2和36之间的整数,表示上述字符串所使用的基数(即数学数字系统中的进位制)。对于人类常用的十进制数字系统,请指定10。 始终指定此参数以消除读者的困惑并确保可预测的行为。 当未指定基数时,不同的实现会产生不同的结果,通常将值默认为10。

请勿这样做

var number = "09";
if(number == 09) { // here it will not compare the type check the == and ===
    alert("OK: " + number)
} else {
    alert("PROBLEM: " + number);
}

正确答案

var number = "09";
var decimal = parseInt(number,10);
if(decimal === 09) {
    alert("OK: " + decimal)
} else {
    alert("PROBLEM: " + decimal);
}

请在控制台中查看

var first = 10 ;
var secn = "10";

first == secn // true because both are equal. 
first === secn // both are not equal by type(string and number)



var result = parseInt("010", 10) == 10; // Returns true

var result = parseInt("010") == 10; // Returns false

Number

Number JavaScript对象是一个包装器对象,可以让您处理数值。使用Number()构造函数创建数字对象。使用Number()函数创建原始类型对象数字。

示例

Number('123')     // 123
Number('12.3')    // 12.3
Number('12.00')   // 12
Number('123e-1')  // 12.3
Number('')        // 0
Number(null)      // 0
Number('0x11')    // 17
Number('0b11')    // 3
Number('0o11')    // 9
Number('foo')     // NaN
Number('100a')    // NaN
Number('-Infinity') //-Infinity

在JavaScript中使用一元运算符将值转换为数字的示例

图片来源


2

这样做是可以的,但它不会实现你想要的功能。带前导零的数字是八进制数字(基数为8的位置数字系统)的文字表示法。例如:

071 == 71
=> false

071 == 57
=> true

更多内容请参见:http://www.w3schools.com/js/js_numbers.asp


这与他的原始代码不兼容,因为数字在那里是字符串,你比较"071" == 071。 - Gavriel

1

It works with parseInt. By default it's base 10. So even 09 is ok, but as @deceze pointed out it's better to explicitly use the radix 10:

var number = "09";
var decimal = parseInt(number, 10);
if(decimal == 09) {
    alert("OK: " + decimal)
} else {
    alert("PROBLEM: " + decimal);
}


2
非常注意,您在此处使用的是八进制表示法,这可能会对您的程序逻辑产生影响! - deceze
1
这并不是“错误”,只是在这种情况下没有副作用。你仍然在使用八进制,并将其扩展到所有可能的情况可能会导致副作用。如果您想要“零填充”达到3位数,该怎么办? - deceze
1
09不存在,Javascript会将其解释为9。再次强调,你必须意识到这一点,因为对于071等情况则不适用。 - deceze
2
在旧版本的IE中,parseInt("09")由于被解释为八进制而无法正确解析。尽管现代浏览器已经改变了这一点,但这并不是适用于每种情况的解决方案。您需要使用parseInt("09", 10)来代替。 - Neil
1
现在你只是故意胡闹... :P - deceze
显示剩余2条评论

0

二进制或十进制的01仍然是一。

<!DOCTYPE html>
<html>

<head>
  <style>
    html,
    body {
      box-sizing: border-box;
      font: small-caps 500 16px/1.4'Consolas';
      width: 100vw;
      height: 100vh;
      background: #222;
      color: lime;
      line-height: 1;
    }
    *,
    *:before,
    *:after {
      box-sizing: inherit;
      margin: 0;
      padding: 0;
    }
    fieldset {
      margin: 1.5em auto;
      padding: 5px;
      min-width: 100px;
      max-width: 50%;
      border: 3px ridge green;
      border-radius: 8px;
    }
    legend {
      font-size: 1.5rem;
    }
    input {
      width: 3ch;
      padding: 2px 1px;
      border: 2px inset green;
      border-radius: 4px;
      background: #000;
      font-size: 1.1rem;
      color: lime;
      font: inherit;
    }
    #msg {
      color: #00FA9A;
    }
  </style>
</head>

<body>
  <fieldset>
    <legend>zer00ne</legend>
    <input id="inp1" oninput="bin(this.value);" />
    <input id="out1" readonly/>
    <span id="msg">Enter 01</span>
  </fieldset>
  <script>
    function bin(x) {
      var msg = document.getElementById('msg');
      var y = document.getElementById('out1');
      var z = parseInt(x, 2);
      y.value = z;
      msg.innerHTML += ", binary or decimal I'm number One";
    }
  </script>
</body>

</html>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接