JavaScript数据类型:在一座奇怪小镇,typeof带我认识了Undefined、Null、Boolean 和Object

26 阅读4分钟



大家好,我是小米,今年 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岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!