javascript - 如何使用 Js 洗牌
问题描述
我搜索了如何洗牌我制作的一副牌,我发现了这些线条,但我无法理解......
- 是 (this) 在第二行中写的一个 js 关键字或者它不仅仅是一个给定的名称
- m如何存储deck.length + i
- 第六行末尾的m--是什么意思
8号线的作用是什么
shuffle() { const { deck } = this; let m = deck.length, i; while (m) { i = Math.floor(Math.random() * m--); [deck[m], deck[i]] = [deck[i], deck[m]]; } return this; }
我知道有很多问题要问,但我会很感激你的帮助
解决方案
是 (this) 在第二行中写的一个 js 关键字或者它不仅仅是一个给定的名称
是的,this
是 JavaScript 中的关键字。我强烈建议你用谷歌搜索“this javascript”来了解它是如何this
工作的。这需要一些时间来解决问题。
m如何存储deck.length + i
我假设你在问关于let m = deck.length, i;
. 注意有一个,
,而不是一个+
。m
只有商店deck.length
。i
是在此行上声明的单独变量。我建议您使用 Chrome 或 Firefox 开发人员工具来逐步检查代码以检查m
. 如果您不熟悉这些工具,那么您肯定需要了解它们以及如何有效地使用它们,尤其是在调试代码时。
第六行末尾的m--是什么意思
--
是后增量运算符。它将 的值减少m
1 并将新值存储在m
. 减法后的结果用于表达式的其余部分。您可以在自己的代码或 JavaScript 控制台中试验此运算符。
8号线的作用是什么
[deck[m], deck[i]] = [deck[i], deck[m]];
使用解构语法交换数组中的两个值。同样,您可以使用浏览器的开发人员工具中的调试器来检查变量的值,看看会发生什么。
推荐阅读
- html - 仅使用 css 将 8 个元素放入一个 div 中
- python - 在 .htaccess 中运行和重定向 python 脚本
- r - 计算组中的滞后字符串
- python - Django:在不创建 mysite.log 文件的情况下显示日志记录
- c# - 从相同的应用程序空间 C++/C# 运行 .exe
- c# - 在我的情况下使用 FixedUpdate 是否正确?
- javascript - 我们如何防止 ngModel 覆盖 Angular 中的自定义 css?
- r - R 更新 textInput 值的闪亮延迟
- postgresql - IntelliJ flyway 配置未找到迁移
- php - 从字符串中删除起始零