typeof null的返回值是什么?_「夯实基础」详解typeof操作符

typeof 的定义

typeof操作符返回一个字符串,表示未经计算的操作数的类型。

17f0e8b293a3205c2fae94f243d59ae3.png

返回值的解释

从上面的例子我们可以看出,typeof 操作符用于检测给定变量的数据类型。对于一个值使用 typeof 操作符,可能返回以下几个字符串:

  • boolean -- 代表这个值是布尔值
  • string -- 代表这个值是字符串
  • number -- 代表这个值是数值
  • symbol -- 代表这个值是Symbol
  • undefined -- 代表这个值未定义
  • object -- 代表这个值是对象或null
  • function -- 代表这个值是函数

返回 boolean、string、number 的情况

对于布尔值、字符串、数字使用typeof 操作符,分别返回 "boolean"、"string"、"number"

4a362a0dd1000618cafb88897c8c6ef7.png

返回 symbol 的情况

对 Symbol 类型的值使用 typeof 操作符时,会返回 "symbol" Symbol 是 ECMAScript 6 新增的类型

25481a1268c062c3a7c65787db44000f.png

返回 undefined 的情况

ef7ece93384684d5562f65e7dc48772e.png

对 undefined 使用 typeof 操作符,返回 "undefined" 未赋值的变量,默认值为 undefined ,对未赋值的变量使用 typeof 操作符,返回 "undefined"

需要注意的问题

在 ECMAScript 6 之前,typeof总是保证为任何操作数返回一个字符串,所以当对未定义的变量使用 typeof 操作符时,也会返回 "undefined", 所以在 ECMAScript 6 之前,typeof 操作符时一个完全安全的操作,永远不会抛出错误。

但在 ECMAScript 6 中,引入了暂时性死区的概念,在变量声明之前,对块中的 let 和 const 变量使用 typeof 操作符时,会抛出一个 ReferenceError

看一个例子

8ada7c0ae51f3ed2cc64b1e58556925c.png

返回 function 的情况

当对函数使用 typeof 操作符的时候,会返回 "function"

bcd2e3d6aef1499ae2fb02ad113914e5.png

需要注意的问题

这里有一个历史遗留问题,需要我们考虑

当我们的浏览器环境是 Safari 5 及以前版本、Chrome 7 及以前版本 在对正则表达式对象使用 typeof 操作符时,也会返回 "function", 实际在 ECMAScript 的规范中,应该返回 "object"

返回 object 的情况

对于不是函数的引用类型的值,使用 typeof 操作符时,会返回 "object"

298605514cf530ab2c9dda8b1b3c3065.png

对于 null 使用 typeof 操作符时,也会返回 "object"

92d789f23cd605a6a3c60a2c51236cc6.png

这是由于在 JavaScript 最初的实现中,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的类型标签是 0。由于 null 代表的是空指针(大多数平台下值为 0x00),因此,null的类型标签也成为了 0,typeof null就错误的返回了"object"

例外情况

上面的所有内容,其实基本概括了所有使用 typeof 操作符的情况 但是在这其中有一个例外情况:

当前所有的浏览器都暴露了一个非标准的宿主对象 document.all

我们在对 document.all 使用 typeof 操作符时,会返回 "undefined"

44077d9e1282d3efdc7dc698dddd0283.png
84da055b82984a1fd318e4cf451b2bbe.png

原文链接:https://mp.weixin.qq.com/s/CI3lUTwY5wNqmSy6cRM7Yg

作者:前端小黑屋

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值