javascript – 灵活地使用Math.random

我想创建一个4个字母的长字符串,RANDOMLY包含字符串中的任何字母:“ROYGBV”.

我做的是这样的:

function generateSolution(){
    var colors = "ROYGBV";
    var str = "";
    for (var i=0; i<4; i++) {
        var loc = Math.ceil( Math.random()*colors.length );
        str += colors.charAt(loc);
    }

    return str;
}

但这似乎不对,为什么会这样?

另外,这是来自练习的解决方案:

str += colors.charAt((Math.random() * 6) | 0);

我在我的解决方案中使用Math.ceil来防止随机浮动,如4.333123等.这个解决方案如何工作,而不会使randomed数字四舍五入?

另外,什么是|操作符意味着以及第二种解决方案中的随机化如何实际起作用?

解决方法:

|是bitwise OR operator.由于JavaScript中的按位运算仅适用于32位整数,这是将数字四舍五入为0的简便方法.在您的情况下,它等效于:

colors.charAt(Math.floor((Math.random() * 6)));

这个数字需要被覆盖而不是向上舍入,就像你目前使用ceil一样,否则你会错过数组的第一个元素(在索引0处).

以下是从the spec转换为整数的完整详细信息:

The production A : A @ B, where @ is one of the bitwise operators in the productions above, is evaluated as follows:

  1. Let lref be the result of evaluating A.
  2. Let lval be GetValue(lref).
  3. Let rref be the result of evaluating B.
  4. Let rval be GetValue(rref).
  5. Let lnum be ToInt32(lval).
  6. Let rnum be ToInt32(rval).
  7. Return the result of applying the bitwise operator @ to lnum and rnum. The result is a signed 32 bit integer.
上一篇:我在c中增加了什么?


下一篇:python:!=和<>之间的区别?