这个样例的JavaScript代码解释是什么?

3
大家好!我已经完成了几个简短的JavaScript课程,现在我开始学习《Heads Up: JavaScript》,这非常有趣,帮助我巩固学习。然而,我遇到了一些不理解的问题。在下面的代码片段中,我知道程序执行时通常做什么,但在尝试追踪每个执行步骤时,我意识到我被一个特定部分的“什么/为什么/如何”所困扰。以下是我正在查看的示例程序的代码:
function makePhrases() {

            var words1 = ["24/7", "multi-tier", "30,000 foot", "B-to-B", "win-win"];

            var words2 = ["empowered", "value-added", "oriented", "focused", "aligned"];

            var words3 = ["process", "solution", "tipping-point", "strategy", "vision"];



            var rand1 = Math.floor(Math.random() * words1.length);

            var rand2 = Math.floor(Math.random() * words2.length);

            var rand3 = Math.floor(Math.random() * words3.length);



            var phrase = words1[rand1] + " " + words2[rand2] + " " + words3[rand3];

            alert(phrase);

        }

        makePhrases();

这是让我感到困惑的部分:

以下是需要翻译的内容:

            var rand1 = Math.floor(Math.random() * words1.length);

            var rand2 = Math.floor(Math.random() * words2.length);

            var rand3 = Math.floor(Math.random() * words3.length);

我明白这是代码的一部分,它随机选择每个数组中的项来形成新的“随机短语”,但我不明白它是如何实现的。我之前也不知道Math.random或Math.floor可以应用于字符串(可能是因为它们在数组中,数组本质上是一个数字?),也不知道使用Math.random或Math.floor与字符串的原因和用法。
此外,为什么我们需要在这种情况下使用.length?它有什么作用?感谢您的智慧和耐心帮助那些新手编码者学习,还有许多东西需要学习!

1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Dawn Deschain
4个回答

3

让我们来看代码:

var rand1 = Math.floor(Math.random() * words1.length);

Math.random()返回一个介于00.999999..之间的数字。

words1是要选择的单词列表。

words1.length表示列表的大小,也就是项目数,在本例中为5

Math.random() * words1.length返回一个介于04.99999..之间的数字。

最后使用Math.floor()获取介于04之间的整数。

然后将此数字用作words1中的索引,因此为words1[rand1]


因此,Math操作永远不会在字符串上使用,仅在最后一步获取字符串。


2
所有的操作都只是将Math.random()作为相应数组元素个数('.length'属性)的乘数来创建索引值。它不是被应用于字符串,仅仅是一个用于确定字符串数组索引的表达式的一部分。

0
Math.random()  //Return a random number between 0-1
words1.length()  //Return the length of the array
Math.floor()     //Return the closest integer less than or equal to a given number.

现在是表达式:

(Math.random() * words1.length) 

将返回一个介于0和数组长度之间的随机数。可能是浮点数,例如3.4:

Math.floor(Math.random() * words1.length)

将返回一个介于0和字符串长度之间的整数,因此您现在可以将其用作字符串(像数组一样)的索引器。

注意:请注意,随机数介于0(包括)和1(不包括)之间,因此使用Math.floor()是安全的,以避免异常,并且不使用Math.ceiling


0

你想从一个数组中随机选择一个元素。因此,你需要一个索引,换句话说,需要一个介于04之间的随机数(因为数组长度为5)。Math.random将给你一个介于01之间的随机数(不包括1)。因此,为了将其转换为介于0和4之间的随机数,你需要将其乘以长度5

然后,由于我们需要一个整数而不是浮点数,所以我们使用Math.floor将其截断为整数。


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