javascript - 该函数是否有两种以上的可能结果?

标签 javascript

我有一个函数应该用于随机重定向到另一个页面:

function () {
        var rand_exp = ['v', 'a'];
        var pick_exp = function(expType) {
                    return expType[Math.floor(Math.random()*expType.length)];
                 }
        if (pick_exp(rand_exp) === 'v') {
           window.location.replace("experiment_v.html");
        } else if (pick_exp(rand_exp) === 'a') {
           window.location.replace("experiment_a.html");
       }
    }

我已经对此进行了多次测试,似乎发生了三件事中的一件,它要么重定向到 if 和 else if 语句中的两个子句之一,要么重定向到上面嵌入了 javascript 的页面,在这种情况下,我只有一个空白屏幕,这是预期的吗?

最佳答案

我想我应该把上面的评论变成一个正确的答案,这个答案的简短版本是肯定的,有两种以上可能的结果。

加长版

您的函数pick_exp已正确实现,因此它将选择输入数组的一个元素。问题是您多次调用它并期望数组的元素在结果中均匀表示。

在第一个条件中,您第一次调用pick_exp。结果可能是“a”或“v”,这将导致表达式为真或为假,每种情况的概率为 50%。如果为 false,则您再次调用它,它会选择一个新值,该值可能是等概率独立的“a”或“v”,或者是您上次调用它时的结果,因此第二个表达式也有 50% 的机会返回 false,这意味着您从函数返回,而没有发生重定向。总体而言,实际重定向的可能性约为 50%。

固定代码如下所示:

function () {
    var rand_exp = ['v', 'a'];
    var pick_exp = function (expType) {
        expType[Math.floor(Math.random()*expType.length)];
    };

    var result = pick_exp(rand_exp);

    if (result === 'v') {
       window.location.replace("experiment_v.html");
    } else if (result === 'a') {
       window.location.replace("experiment_a.html");
   }
}

您可以在没有该函数的情况下完成此操作,并得到如下所示的结果:

function () {
    var rand_exp = ['v', 'a'];
    var pick_exp = rand_exp[Math.floor(Math.random()*rand_exp.length)];

    if (pick_exp === 'v') {
       window.location.replace("experiment_v.html");
    } else if (pick_exp === 'a') {
       window.location.replace("experiment_a.html");
   }
}

上述代码恰好产生两个可能的路径:'v' ->experiment_v.htmla ->experiment_a.html

或者,您可以直接使用结果:

function () {
    var rand_exp = ['v', 'a'];

    window.location.replace("experiment_" + rand_exp[Math.floor(Math.random()*rand_exp.length)] + ".html");
}

关于javascript - 该函数是否有两种以上的可能结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39834347/

相关文章:

javascript - 如何在 JavaScript 中转义单引号 ( ' )?

IE 中存在 JavaScript 问题,但 Firefox 中没有

javascript - Firefox 扩展 : Cancel requests and emit fake responses

javascript - 如果任何 aui 表单字段值发生更改,则启用 aui 按钮

javascript - 如何在 JS 中从正则表达式获取选定的 str.replace 值

javascript - CSS制作:active toggled

javascript - 无法返回值以响应 mongoose/mongodb 和 nodejs

javascript - 使用js动态添加SVG mask

javascript - 如何使用 axios 在 Vue 应用程序中获取、更新和渲染数据?

java - 在 xmpp 中创建所有聊天、群组消息和不同 pubsub 出版物的个人聚合