大家好,我是小米,今年 31 岁,一个把“写代码”当成“讲故事”的程序员大哥哥。
有一天晚上,我对着一段 JavaScript 代码发呆:
屏幕上冷冰冰地回了我一句:
那一刻,我沉默了三秒。
- “null 怎么会是 object?”
- “Undefined 和 Null 到底差在哪?”
- “Boolean 为什么一会儿是 true/false,一会儿又像个爱骗人的家伙?”
我突然觉得,JavaScript 的数据类型,就像一座表面秩序井然、内部关系混乱的小镇。
于是我决定,走进这座小镇,挨个拜访这些“居民”。而带我进镇的向导,叫做 —— typeof。
typeof:JavaScript 小镇的户籍警察
在 JavaScript 小镇里,typeof 的身份非常明确:
它是户籍警察,负责告诉你:“这个值,表面上看起来像什么人。”
注意,是表面上。
1. typeof 是干什么的?
typeof 是 JavaScript 的一个一元操作符,用来返回一个值的“类型字符串”。
看起来很靠谱,对吧?但请注意,小镇里有个著名的“历史遗留问题”。
2. typeof 的“历史悬案”
这是 JavaScript 史上最著名的 Bug 之一:
null 不是 object,但 typeof 却说它是 object。
这就好比:
- null 是一块“空地”
- object 是“房子”
- 户籍警察却说:“这块空地是房子”
这个错误来自 JavaScript 最早期的设计,为了兼容性,永远无法修复。所以在小镇里有一句老话:
“判断 null,永远不要只靠 typeof。”
Undefined:还没出生的居民
我们走进小镇的第一个居民区,见到的,是 Undefined。
1. Undefined 是谁?
Undefined 的含义非常直白: “声明了,但还没有被赋值。”
就像一个名字已经写进户口本,但人还没出生。
2. 哪些情况会得到 undefined?
我们来列一张表,帮你一次性记住。
示例代码:
Undefined 在小镇里的性格是:
- 不主动
- 不报错
- 静静地待着
3. Undefined 的真实定位
在 JavaScript 里:
- undefined 是一个值
- 同时也是一个类型
所以 Undefined 可以说是:JavaScript 世界里,最“诚实”的一种状态。
Null:已经搬走的房子
如果说 Undefined 是“人还没来”,那 Null 就是:
“人来过,但已经走了。”
1. Null 的设计初衷
Null 表示:一个“明确为空”的值, 也就是说,这个变量曾经是有意义的,但现在被你主动清空了。
这不是“没赋值”,而是:“我告诉 JavaScript,这里什么都没有。”
2. Undefined vs Null:人生阶段对比
这两个家伙,前端面试一定会问。我们用一张表,直接说清楚。
3. 为什么 null 的 typeof 是 object?
这是 JavaScript 早期的底层实现导致的错误。你只需要记住一句话:
null 不是 object,但 typeof 无法区分它。
Boolean:非黑即白的裁判员
接下来登场的,是小镇里最“爱表态”的居民 —— Boolean。
1. Boolean 的表面身份
Boolean 类型只有两个值
看起来非常简单,对吧?但真正的戏剧,发生在 条件判断 中。
2. Boolean 的“潜规则”:Truthy & Falsy
在 JavaScript 小镇里,并不是只有 true 和 false 才能参加判断。很多值,会被偷偷转成 Boolean。我们直接上表格。
Falsy(会被当成 false 的值)
除了这些,其余的,全部是 truthy。
这就是为什么很多 Bug 来自这里。
3. Boolean 的常见陷阱
原因很简单:
JavaScript 判断真假,看的是“是否为空”,不是“看起来像不像 false”。
Object:JavaScript 世界的“万能容器”
终于,我们来到了小镇的中心 —— Object。
1. Object 是什么?
一句话概括:JavaScript 中,万物皆对象(除了少数原始类型)。
Object 就像一个:可以装任何东西的收纳盒。
2. Object 的基本结构
- key 是字符串
- value 可以是任何类型
3. Object 和其他类型的关系
我们用一张“居民关系表”总结一下。
你会发现:typeof 只能告诉你“是不是对象大类”,但无法细分。
typeof 的正确使用姿势总结
在故事的最后,户籍警察 typeof 把我送到了小镇门口,对我说了几句话。
1. typeof 能做什么?
- 判断基本类型
- 区分 function
- 快速排查问题
2. typeof 不能做什么?
- 不能区分 null
- 不能区分 Array / Object
- 不能作为唯一判断标准
总结
如果你把 JavaScript 当成一门“死记硬背的语言”,那 typeof、undefined、null 永远都会折磨你。
但如果你把它当成一座有历史、有妥协、有性格的小镇:
- undefined 是还没出生的人
- null 是已经搬走的房子
- boolean 是爱站队的裁判
- object 是包容一切的容器
- typeof 是那个有点糊涂、但仍然有用的户籍警察
你会发现:很多“怪异行为”,其实都讲得通。
END
如果这篇文章对你有帮助,欢迎点赞、在看、转发。
我是小米,一个喜欢分享技术的31岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!