JS 奇技淫巧
Feb 25, 2026 · 2017 字
倒序遍历
for (let i = arr.length - 1; i--) {
console.log(arr[i]);
}
小数取整
~~3.14; // 3
3.14 | 0; // 3
变量交换
[a, b] = [b, a];
布尔化
Boolean(value);
!!value;
数字转换
Number("123"); // 123
parseInt("123"); // 123
+"123"; // 123
"123" - 0; // 123
| 特性 | Number() | parseInt() |
|---|---|---|
| 解析方式 | 整体转换:尝试把整个字符串当成一个合法的数字字面量 | 逐字符读取,遇到非数字就停(默认十进制,或可指定基数) |
| 空格处理 | 会忽略前后空格 | 忽略前导空格,但遇到空格即结束 |
| 非数字字符 | 有任意非数值字符则返回 NaN | 读取到第一个非数字时停止并返回当前值 |
| 前缀识别 | 识别 0x…、0b…、0o… 等 | 支持 0x 前缀或通过 radix 指定进制 |
默认值
foo = foo || "default";
bar ??= "fallback";
baz ||= 42;
可空链与短路调用
obj?.method?.();
callback && callback();
逗号运算符返回最后一个结果
let x = ((a = 1), (b = 2), a + b); // 3
模版字符串原始文本
const raw = String.raw`Line1\nLine2`;
箭头函数隐式返回逻辑结果
const isPositive = (n) => n > 0 && "ok";
快速复制数组
const copy = [...arr];
给对象添加属性并返回对象
const withId = ((o) => ((o.id = Date.now()), o))({});
用位运算快速取整
Math.floor(x) === x ? x : x | 0;
使用 map 转换 null/undefined
const clean = arr.map((v) => v ?? "");
使用双重位非清除符号 (tilde)
// 如果数组长度不是整数,则返回-1
const idx = ~arr.indexOf(x); // ≠ -1 表示存在
立即执行箭头函数
(() => {
console.log("IIFE");
})();
函数返回对象并立即解构
const { a: first } = ((x) => ({ a: x, b: x * 2 }))(5);
逻辑运算结果赋值
const result = value && value.prop;
创建指定长度填充空值再 map
const zeros = Array(5)
.fill()
.map((_, i) => i);
取余正值 hack
const mod = ((n % m) + m) % m;
用字典快速 switch
const actions = { a: () => 1, b: () => 2 };
const res = (actions[key] || (() => 0))();