财务同事发来一张表,VLOOKUP查不到的单元格显示#N/A,整列求和直接报错。她说想找个空值函数把这些格子清掉。空值这件事在Excel、SQL、JavaScript里各有一套写法,混着用最容易出错。
Excel:ISBLANK只管真空白
ISBLANK(A1)只在单元格完全没内容时返回TRUE。公式返回空字符串的格子,它照样给FALSE。要兼容这种情况,用A1等于两个半角引号去判,或者LEN(A1)=0。清理#N/A用IFERROR(VLOOKUP(...),0),2019之前用IF(ISNA(...),0,...)。
SQL:COALESCE是通用解
标准写法是COALESCE(col,0),按顺序取第一个非NULL值。MySQL有IFNULL(a,b),Oracle有NVL,SQL Server有ISNULL,都只接两个参数,跨库迁移时换成COALESCE更省事。注意NULL参与任何算术都得NULL,SUM会跳过NULL,COUNT(col)也不计NULL,只有COUNT(*)全算。
JS:??和||不是一回事
const n = value ?? 0; const m = value || 0;第一行只在value为null或undefined时兜底;第二行把0、空字符串、false也当成空。价格字段用||会把0元改成默认值,这种bug很难查。老项目没上ES2020,就用value == null判一下。
PHP的empty更宽
empty($x)对0、字符串0、空数组、false全部返回true。判断表单有没有填,用isset加全等比较空字符串,别用empty,否则用户填0会被当成没填。
判断口诀:先想清楚业务里0和空字符串算不算有效值。算,就只能判null;不算,才可以用宽松的空值函数。这条定下来,上面所有写法都不会选错。