null不是零值,语义上表示“本该有对象但为空”,类型为null,参与运算时仅加法转0,严格与宽松相等均不等于0,不可与0互换使用。
null 类型不是零值,它和 0 在语义、类型、行为上完全不同。把 null 当作“0”来用,是常见误解,容易引发隐性 bug。
语义完全不同
null 表示“本该有对象,但现在什么都没有”,是一种主动设置的空引用;0 是一个具体的数值,表示数量为零,属于 Number 类型,有明确的数学意义。
-
null:你写user = null,意思是“我清楚地清空了用户引用” -
0:你写count = 0,意思是“当前计数就是零个”
类型判断结果不同
typeof null 返回 "object"(历史遗留,但已成规范);typeof 0 明确返回 "number"。
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
-
Object.prototype.toString.call(null)→"[object Null]" -
Object.prototype.toString.call(0)→"[object Number]"
参与运算时表现截然不同
在数字上下文中,JavaScript 会尝试转换它们,但结果差异明显:
-
10 + null→10(null被转为0,仅限加法等基础算术) -
10 + 0→10(正常数值相加) -
10 + undefined→NaN(对比可知,null的“类零”行为是特例,不具普适性) -
null === 0→false(严格相等直接失败) -
null == 0→false(双等也不成立,不像null == undefined那样返回true)
实际使用中不能互相替代
API 设计、状态初始化、条件判断都依赖准确语义:
- 函数查不到用户,应返回
null,而不是0—— 否则调用方无法区分“没找到”和“找到了 ID 为 0 的用户” - 表单输入框清空后,值是
""或null,绝不是0(除非业务真要存数字 0) - 判断是否“未设置”,应写
value === null或value === undefined,而非!value或value == 0,后者会把""、false、0全部误判
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










