typeof 配合逻辑运算符可简化类型判断:用 && 安全取值(如 typeof name==='string' && name.trim()),用 || 结合 typeof 提供类型兼容默认值(如 (typeof timeout==='number' && timeout) || 5000),用 ?? 需先确保类型再空值回退,并注意 null、数组等 typeof 返回 'object' 的陷阱。

用 typeof 配合逻辑运算符(如 &&、||、??)可以写出更简洁、可读性更强的类型判断逻辑,避免冗长的 if...else 或重复的 typeof x === 'string' 检查。
用 && 快速校验类型并取值
当需要「确保某值是特定类型才使用它」时,&& 能自然融合类型检查与短路求值:
-
typeof name === 'string' && name.trim():只有name是字符串才调用trim(),否则直接返回false(或转为''后续处理) -
typeof data === 'object' && data !== null && data.id:安全取id,排除null(因为typeof null也是'object')
用 || 提供类型兼容的默认值
注意:|| 基于「falsy 值」判断,不严格等于类型检查,但结合 typeof 可增强语义:
-
(typeof timeout === 'number' && timeout) || 5000:仅当timeout确实是数字时才采用,否则用默认值 - 比单纯写
timeout || 5000更可靠——避免0、false等合法值被误替换
用 ?? + typeof 实现精准空值回退
?? 只在左侧为 null 或 undefined 时生效,配合 typeof 可明确意图:
-
(typeof user === 'object' && user != null) ? user.name : 'Anonymous'→ 可简化为:typeof user === 'object' && user != null ? user.name ?? 'Anonymous' : 'Anonymous' - 更常见的是先保类型再空值处理:
typeof input === 'string' ? input ?? '' : ''
避开 typeof 的几个坑
简化不等于盲目缩写,需留意这些典型陷阱:
-
typeof null === 'object'—— 判断对象时务必加val !== null -
typeof [] === 'object',typeof new Date() === 'object'—— 数组、日期等也返回'object',真要区分得用Array.isArray()或instanceof -
typeof undefined安全,但typeof undeclaredVar不报错,仍返回'undefined'—— 这反而是优势,适合检查未声明变量











