揭秘长箭头“运算符” “运算符”背后的魔力 不要抛弃循环

2025-06-07

揭秘长箭“运算符”

“操作员”背后的魔力

不要抛弃循环

我最近偶然发现了一些非常有趣的代码。它本质上是一个循环迭代,但略有不同。它使用了一个神秘的长箭头“运算符”

const pets = ['Lucky', 'Sparkles', 'Presto', 'Fluffykins'];
let i = pets.length;

// A wild LONG ARROW OPERATOR appeared!
while (i --> 0) {
  console.log(pets[i]);
}

// 'Fluffykins'
// 'Presto'
// 'Sparkles'
// 'Lucky'
Enter fullscreen mode Exit fullscreen mode

这个“运算符”有趣且不寻常之处在于,它会反向pets迭代数组,如控制台输出所示。看起来书写起来i --> 0就像倒计时一样0。瞧,它实际上是在后台倒计时。

“操作员”背后的魔力

到目前为止,本文中“运算符”一词使用引号并非巧合。长箭头“运算符”实际上并不是一个运算符。更准确地说,它是两个运算符的组合。

长箭头“运算符”(-->)只是后缀减量运算符(--大于运算符(>的组合。

由于 JavaScript 在大多数情况下会忽略空格,我们可以巧妙地将代码格式化,将--和粘合>在一起,形成-->。与其说x-- > 0,不如说x --> 0。无论格式如何,JavaScript 都会将长箭头“运算符”解释为两个独立的运算符。

注意:如果您觉得用 进行数值比较有点奇怪,我最近写了一篇关于自增和自减运算符细微差别的文章。您可以在这里x--阅读

// All of these _output_ the same thing to the console.
// EXAMPLE 1: Good ol' `while` loops
let a = 5;
while (a > 0) {
  a--;
  console.log(a);
}

// EXAMPLE 2: Good ol' `for` loops
for (let b = 4; b >= 0; b--) {
  console.log(b);
}

// EXAMPLE 3: Combination of two operators
let c = 5;
while (c-- > 0) {
  console.log(c);
}

// EXAMPLE 4: Long arrow "operator"
let d = 5;
while (d --> 0) {
  console.log(d);
}
Enter fullscreen mode Exit fullscreen mode

不要抛弃循环

好了,你明白了。那个神秘的长箭头“运算符”其实就是两个运算符的组合。我觉得这是一种非常好的代码阅读方式,因为它与微积分中极限的符号非常相似

话虽如此,这里列出了我会阅读的多种方式x --> 0

  • “随着x接近0
  • x前往0
  • x倒计时0
  • “减少x直到达到0
  • “减去1直到x达到0

虽然长箭头“运算符”看起来读起来不错,但我不会用它来写代码。代码格式太巧妙了。乍一看,尤其是对于这门语言的新手来说,它似乎一点也不直观。你可以快速在谷歌上搜索 JavaScript、Java 或 C++ 中的长箭头“运算符”,结果却发现相关的资源并不多。

它对初学者不够友好,这就是我不喜欢它的原因。你必须了解后缀减量运算符的返回值,才能完全理解为什么这样的代码在语法上是正确的。初学者不应该费心去学习一门编程语言的复杂性。俗话说,显式比隐式好。

除此之外,长箭头“操作符”的作用类似于倒计时。因此,它会反向迭代数组,这在某些情况下可能并非我们所期望的行为。

总而言之,长箭头“运算符”是一种巧妙地格式化两个不同运算符的方法。除非你(以及你的同伴)完全熟悉长箭头符号 或者你只是想用一些他们从未见过的奇怪语法给你的朋友留下深刻印象,最好坚持使用for循环进行通用迭代。

文章来源:https://dev.to/somedood/demystifying-the-long-arrow-operator-4711
PREV
JavaScript 并发:避免顺序陷阱 简介 范围和限制 空闲执行 Promise.all Promise.allSettled 单线程语言的注意事项 Promise 和工作线程 结论
NEXT
基于语法的命名约定基本规则语义数据类型总结一下...