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

Better way to use parseInt() to change users' promt() into numbers

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

// 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));

两个代码块都可以很好地得到相同的结果。但哪个是更好的实践,甚至是 运行 程序时的表现?

我先声明我无法确定这个答案的正确性,它只是基于观察的意见。我相信性能可以忽略不计,但是将一个 int 传递给一个函数比传递一个字符串然后将其解析为一个 int 稍微快一点。我用来证明这一点的逻辑是字符串是比 int 更复杂的数据类型。

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

使用对你来说更易读的任何东西,但如果你想挤压额外的性能,请尝试在其他地方清理,比如删除这两个临时变量,使用按位地板等......(看起来很难看, 是):

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

你会发现你的两个案例通常彼此接近,我的方法稍微快一些,当你不解析整数时你会加速。