为什么 typeof 是空的“对象”?

2022-08-29 23:51:04

我正在阅读“Web开发人员的专业Javascript”第4章,它告诉我五种类型的基元是:未定义,空,布尔,数字和字符串。

如果 是 基元,为什么返回 ?nulltypeof(null)"object"

这难道不意味着它是通过引用传递的(我在这里假设所有对象都是通过引用传递的),因此它不是一个基元?null


答案 1

MDN页面关于类型运算符的行为

null

// This stands since the beginning of JavaScript
typeof null === 'object';

在JavaScript的第一个实现中,JavaScript值被表示为类型标签和值。对象的类型标记为 0。 表示为 NULL 指针(在大多数平台中0x00)。因此,null 具有 0 作为类型标记,因此返回值为 “object”。(参考资料nulltypeof)

有人提议对 ECMAScript 进行修复(通过选择加入),但被拒绝。这将导致.typeof null === 'null'


答案 2

如果 是 基元,为什么返回 ?nulltypeof(null)"object"

因为规范是这么说的

11.4.3 运算符typeof

生产一元表达式一元表达式的评估如下:typeof

  1. val 是评估一元表达式的结果。
  2. 如果 Typeval) 是 Reference,则
    a.如果 IsUnresolvableReferenceval) 为 true,则返回 “undefined”。
    (二)Let val be GetValueval).
  3. 根据表 20 返回由 Typeval) 确定的字符串。

enter image description here