您是否曾经用 JS 写过一些感觉不对劲的东西...但不知何故却运行得很顺利?
这些不仅仅是怪癖——它们会让你“等等,这是有效的 JavaScript代码吗?”。明智地使用它们,你要么能写出天才级别的代码,要么在代码审查中被人用怪异的眼光看待。值得一试。
1. ♂️ 逗号运算符 — 单行魔法
见过这个吗?
const result = (doSomething(), doSomethingElse(), 42);
是的,那又回来了42。
为什么?因为逗号运算符会计算所有表达式,但只返回最后一个。这很混乱。
用例:奇怪的内联返回中的多个操作:
return (log("calculating"), expensiveFunction());
2. 用于with()打破时间和空间
const wizard = { spell: "fireball", mana: 9001 };
with (wizard) {
console.log(spell); // fireball
}
这就像将对象键注入到本地作用域中。在严格模式下被禁止——这是有充分理由的——但在 JavaScript 多元宇宙中,技术上是合法的。
⚠️ 不建议在实际使用。但你可以给你的朋友留下深刻印象。
3. 使用自定义重载 TruthinessvalueOf
使对象处于布尔上下文中:
const sneaky = {
valueOf() {
return 0; // falsy!
}
};
if (!sneaky) {
console.log(" Fooled you");
}
你可以重新定义对象在转换为数字或布尔值时的行为。感觉像是在作弊,但实际上确实如此。
4. 创建无限数组(但不要使用它们)
const infinity = {
*[Symbol.iterator]() {
while (true) yield Math.random();
}
};
for (let n of infinity) {
console.log(n);
if (n > 0.99) break;
}
这是一个无限可迭代对象。你正在生成潜在的无限数据……直到你的耐心或内存耗尽。
用例:程序内容、流模拟、合成数据。
5. 基本上是戴着太阳镜 Function.constructor的 JavaScripteval()
const add = new Function("a", "b", "return a + b");
console.log(add(2, 3)); // 5
就像eval(),但裹着西装领带。充满活力,危险,而且权力太大了。
实际用例?在自定义 UI 或解释器中生成作用域、沙盒逻辑。
6. 将状态存储在函数本身上
函数是对象。对象可以拥有属性。因此……
function clickTracker() {
clickTracker.count = (clickTracker.count || 0) + 1;
console.log(`Clicked ${clickTracker.count} times`);
}
无需外部变量。该函数具有自我意识。
使用它来进行可爱的封装、有状态的回调或快速破解。
奖励:你可以分配给[]
[] = 42;
有效。没用。太棒了。没有错误。JavaScript 只是……接受了它。
♂️ TL;DR
JavaScript 可不是随便就能用上的。它的某些功能就像班里那些古怪的孩子——混乱、聪明、容易被误解。但在合适的人手中,它们就成了传奇的工具。
你写过的最奇怪的 JavaScript 是什么?
我想要那些被诅咒的东西。快来评论区留言吧。让我们一起庆祝这狂野的语言。

