javascript - 条件赋值和返回赋值背后的逻辑是什么
问题描述
我不会对这个故事感到厌烦,但本质上我有一些晦涩的 JavaScript 需要处理,这一切都很好,但我正在努力处理我以前从未见过的代码中的 2 种模式。
下面的这个函数包含这两种模式。
var a = function() {
if (h = true,
T(),
DEVELOPMENT && "#y0" == window.location.hash)
return game.playRegion = "eu",
game.playRoom = "ffa1",
game.playInvited = true,
game.myOriginalName = window.location.hash.substr(1),
void Games.start(game.myOriginalName, true);
f || (I(),
Games.updateRegion(false),
Games.updateType(false),
C())
}
- 首先看
if
声明。我从未见过if
做赋值和调用函数,所以我不明白条件的逻辑。我可以将语句移到上面吗,if
或者除非满足完整条件,否则语句不会运行?我可以这样做:
h = true;
T();
if (DEVELOPMENT && window.location.hash === "#y0"){}
- 是怎么回事
return
?return 是一系列语句,那么它实际上返回的是什么?到底是怎么void
回事?
解决方案
几乎所有东西都是 JavaScript 中的表达式。
赋值也只是表达式。a = b
评估为b
。
逗号运算符(使用非常广泛)计算到逗号的右侧,因此a, b, c
计算结果为c
.
void
接受任何表达式,并且总是计算为undefined
.
因此:
return a = b, void c();
if(d(), e) {}
等于:
a = b;
c();
return undefined;
d();
if(e) {}
推荐阅读
- design-patterns - 适配器设计模式,一个 Adaptee 类继承另一个?
- angular - 重新加载页面后重定向到未找到的页面(本地化路由器本地化)
- python - Python的随机使用系统时间如何?
- javascript - 如何使用javascript检查上传到服务器的文件是否为空白?
- django - 如何关联模型并使用它
- perl - 如果文件不存在,则从目录中删除文件时的 Perl 警告
- c++ - 查找数组中重复(重复)数字的索引
- javascript - React - 如何从令牌网址查看图像?
- css - Angular Material 图标按钮格式
- regex - 使用正则表达式提取具有特定模式的第一行