Typeof操作符返回一个非空的字符串

Typeof operator resturns a string than null

本文关键字:一个 字符串 操作符 返回 Typeof      更新时间:2023-09-26

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

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

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

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

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

你可以阅读更多关于JavaScript如何处理它的官方规范。

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

因此,该语句将始终作为true传递:

 typeof null === 'object';

有一个针对这个问题的建议修复,但是它被拒绝了,因为它会导致使用这个"技巧"来验证null的现有代码出现问题。

虽然它返回"null",这纯粹是typeof的方式告诉你它的类型是什么…它实际上并没有返回你测试的类型的类型,明白吗?

测试任何类型,它将返回一个"string", "object"等

这似乎与您在任何地方运行代码的全局变量有关。由于一个长期存在且永远不会修复的错误,null引用的类型被求值为object.

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

然而,在某些环境中,似乎特定的变量名被设置为诸如"null"或"之类的值,这意味着它将计算为字符串

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

要尝试一下,打开一个javascript控制台,在stackoverflow上输入

name
//=> ""