揭秘长箭“运算符”
“操作员”背后的魔力
不要抛弃循环
我最近偶然发现了一些非常有趣的代码。它本质上是一个循环迭代,但略有不同。它使用了一个神秘的长箭头“运算符”。
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'
这个“运算符”有趣且不寻常之处在于,它会反向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);
}
不要抛弃循环
好了,你明白了。那个神秘的长箭头“运算符”其实就是两个运算符的组合。我觉得这是一种非常好的代码阅读方式,因为它与微积分中极限的符号非常相似。
话虽如此,这里列出了我会阅读的多种方式x --> 0
。
- “随着
x
接近0
” - “
x
前往0
” x
“倒计时0
”- “减少
x
直到达到0
” - “减去
1
直到x
达到0
”
虽然长箭头“运算符”看起来读起来不错,但我不会用它来写代码。代码格式太巧妙了。乍一看,尤其是对于这门语言的新手来说,它似乎一点也不直观。你可以快速在谷歌上搜索 JavaScript、Java 或 C++ 中的长箭头“运算符”,结果却发现相关的资源并不多。
它对初学者不够友好,这就是我不喜欢它的原因。你必须了解后缀减量运算符的返回值,才能完全理解为什么这样的代码在语法上是正确的。初学者不应该费心去学习一门编程语言的复杂性。俗话说,显式比隐式好。
除此之外,长箭头“操作符”的作用类似于倒计时。因此,它会反向迭代数组,这在某些情况下可能并非我们所期望的行为。
总而言之,长箭头“运算符”是一种巧妙地格式化两个不同运算符的方法。除非你(以及你的同伴)完全熟悉长箭头符号
或者你只是想用一些他们从未见过的奇怪语法给你的朋友留下深刻印象,最好坚持使用for
循环进行通用迭代。