开发者问题收集

Typeof 运算符返回一个字符串而不是 null

2015-10-21
71

我是 Js 新手。 现在我有这个代码

var name = null;
console.log(typeof name);

但是结果是一个字符串?这是为什么?为什么不是 null?

3个回答

在 JavaScript 中, null 的数据类型实际上是一个对象,而不是真正的 null

因此,当您调用 typeof 时,它将返回一个字符串“undefined”(或“null”),而不是您期望的 null 值。

您可以在 官方规范 上阅读有关 JavaScript 如何处理它的更多信息。

JavaScript 值最初表示为一个标签和一个值,对象的标记为 0,而 null 表示为标准空指针。 这导致 typeof 返回标记为空值的 0 的问题。

因此,此语句将始终为真:

 typeof null === 'object';

曾有人提出修复此问题,但该修复被拒绝,因为它会导致使用此“技巧”验证空值的现有代码出现问题。

Sk93
2015-10-21

尽管它返回“null”,但这纯粹是 typeof 通知您其类型的方式……它实际上并没有返回您测试的类型,这有意义吗?

测试任何类型,它都会将其作为“字符串”、“对象”等返回

An0nC0d3r
2015-10-21

无论您在何处运行代码,它似乎都与全局变量有关。由于一个长期存在的错误,永远无法修复,空引用的类型被评估为对象。

var a = null;
typeof a
// => "object"

但是,在某些环境中,似乎特定变量名称被设置为诸如“null”或“”之类的值,这意味着它将被评估为字符串

name
//=> "null"
typeof name
//=> "string"

要尝试这一点,请继续在 stackoverflow 上打开 javascript 控制台并输入

name
//=> ""
Jonah Williams
2015-10-21