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))();
目录

粤ICP备2025414119号 粤公网安备44030002006951号

© 2026 Saurlax · Powered by Astro