代码之家  ›  专栏  ›  技术社区  ›  chenghuayang

使用parseInt()将用户promt()更改为数字的更好方法

  •  0
  • chenghuayang  · 技术社区  · 9 年前

    我设置了一个函数来询问用户一系列的数字,并给他们一个随机数。第一次尝试是可以的。

    // function settings
    function getRandom(lower, upper) {
      return Math.floor(Math.random()*(upper-lower+1))+lower;
    }
    
    // ask users to give a range of numbers
    var lowerNum = parseInt(prompt("lower number?"));
    var upperNum = parseInt(prompt("upper number?"));
    
    document.write(getRandom(lowerNum, upperNum));


    然而,我认为最好还是采取 parseInt() 在函数内部,这样它将更加清晰和语义化。

    // function settings
    function getRandom(lower, upper) {
      lower = parseInt(lower);
      upper = parseInt(upper);
      return Math.floor(Math.random()*(upper-lower+1))+lower;
    }
    
    // ask users to give a range of numbers
    var lowerNum = prompt("lower number?");
    var upperNum = prompt("upper number?");
    
    document.write(getRandom(lowerNum, upperNum));

    这两个代码块都可以很好地工作并得到相同的结果。但哪一个是 更好的实践 ,甚至是运行程序时的性能?

    3 回复  |  直到 9 年前
        1
  •  3
  •   Shomz    9 年前

    使用对你来说更可读的东西,但如果你想挤出额外的一点性能,可以尝试在其他地方清理,比如丢弃这两个临时变量,使用逐位地板等……(看起来很难看,是的):

    function getRandom(lower, upper) {
      return (Math.random()*(upper-lower+1) | 0) + lower;
    }
    
    alert(getRandom(parseInt(prompt("lower number?"), 10), parseInt(prompt("upper number?"), 10)));

    Performance tests

    您将看到您的两种情况通常彼此接近,我的方法稍微快一点,并且当您不解析整数时,您会变得很快。

        2
  •  1
  •   Leo Javier    9 年前

    我会说第一个……不是因为parseInt,而是因为变量查找……在第二个函数中,您对全局范围内声明和初始化的变量进行了额外的查找。

        3
  •  1
  •   Crinkley Crewms    9 年前

    我将在开头说,我对这个答案的正确性毫无把握,这只是一个基于观察的观点 。我认为性能可以忽略不计,但将int传递给函数比传递字符串然后将其解析为int要快得多。我将使用的逻辑行来证明这一点,即字符串是比int更复杂的数据类型。