SQL Server 中 '' 和 NULL 判空逻辑完全不同:'' 是长度为 0 的有效字符串,NULL 表示未知或缺失;WHERE column = '' 不匹配 NULL,WHERE column IS NULL 不匹配 '';需用 OR 或 COALESCE(column, '') = '' 统一判空。

SQL Server 中 '' 和 NULL 判空逻辑完全不同
在 SQL Server 里,''(空字符串)和 NULL 是两种完全不同的状态:前者是长度为 0 的有效字符串值,后者代表“未知”或“缺失”。WHERE column = '' 永远不会匹配到 NULL;反过来,WHERE column IS NULL 也永远不匹配 ''。
常见错误写法:WHERE column != 'xxx' 或 WHERE column '' —— 这两类表达式在遇到 NULL 时全部返回 UNKNOWN,被 WHERE 当作 false 过滤掉,导致数据丢失却不报错。
- 判空必须显式分开处理:
WHERE column IS NULL OR column = '' - 想统一视为空值?用
COALESCE(column, '') = ''(把 NULL 转成 '' 再比) -
LEN(column)对NULL返回NULL,不是 0;要安全判断长度,得先ISNULL(LEN(column), 0) = 0
JavaScript 里 ''、null、undefined、空位全都不等价
JS 数组或对象中这四类“看起来空”的东西,行为差异极大:
-
[1, , 3]中间是**空位**(empty slot),filter/map直接跳过它,in操作符返回false -
[1, undefined, 3]中间是真实存在的undefined,会被遍历到,1 in arr返回true -
[1, null, 3]和[1, '', 3]同样是真实值,但Boolean(null)和Boolean('')都是false,容易误判 -
JSON.stringify([1,,3])→"[1,null,3]",空位被序列化成null,进一步混淆概念
所以别写 arr.filter(x => x) —— 它会把 0、false、'' 全干掉,而这些可能是合法业务值。
Vue 插槽里传了 '' 却渲染不出内容?问题不在值本身
插槽内容是否显示,跟传进去的是 '' 还是 null 没直接关系,关键看父组件有没有真正“传内容”。比如:
-
<my-comp></my-comp>→ 没传任何内容,slots.default是undefined,不是'' -
<my-comp>{{ '' }}</my-comp>→ 传了空字符串文本节点,slots.default存在且可调用,但渲染出来就是空白 - 如果子组件内部写了
v-if="slots.default()",那''会被当成 falsy 值跳过——这不是判空逻辑错,是条件渲染写法太粗暴
更隐蔽的坑:<slot v-if="show"></slot> 会让整个插槽出口消失,父组件内容根本进不来。判空前先确认插槽函数是否被正确传递和调用。
TypeScript 可空引用类型让 null/undefined 判断更严格,但也更易出错
开启 <Nullable>enable</Nullable> 后,string 表示“绝不为 null 或 undefined”,string? 才允许。编译器会据此推断并报错:
-
const name: string = maybeName;→ 若maybeName类型是string?,这里直接报错 -
name.toUpperCase()→ 如果name是string?,没加if (name)就调用,编译时报“可能为 null”警告 - 但注意:运行时行为不变,所有检查只发生在编译期;上线后仍可能因外部数据(如 API 返回
null)触发NullReferenceException
最常踩的坑是把接口字段声明为 string,结果后端实际返回 null —— 类型声明和真实数据契约对不上,编译不报错,运行时崩。

















