js中 typeof 和 instanceof 的区别

1. typeof

  1. typeof 是一个用于检测 JavaScript 的数据类型的操作符。它返回一个字符串,字符串的值可能为以下几种:
    • boolean
    • number
    • string
    • undefined
    • function
    • object
    • symbol(ES6)
    • bigint(ES2020)
  2. typeof 的怪异行为
    • 尽管 NaN 的含义为 “Not a Number”,但通过 typeof 检测其类型依然会返回 “number”
    • 另一个特别的数据类型是 null,使用 typeof 检测其类型会返回“object”。这个结果可能令人奇怪,一个比较合理的解释是:由于 null 类型一般用于指代一个 “空” 的对象,因此我们可以认为它也是一个对象,尽管访问它的属性会抛出类型错误。
  3. 局限性
    1. 尽管 typeof 对于原始值(基本类型)和的检测非常有用,但在对象识别上,就有点力不从心了。使用 typeof 检测 数组和对象 都会返回 “object”,但是这个结果对我们并没有什么用处。因为我们通常不关心一个值是不是对象,而是希望知道它是不是某个类型的实例。
    2. 在 ES6 的 letconst 出现之前,typeof 是一个安全的操作,当检测一个变量的类型时,我们不需要关系该变量是否已经定义,对于未定义的变量,会返回一个 undefind 值。ES6 之后,在 letconst 定义的变量或常量定义之前使用 typeof 检查它们的类型时,则会导致报错。

2. instanceof

  1. instanceof 是一个运算符,它能够检测对象或原始值的包装对象是否是指定构造函数的实例。它的右操作数是一个构造函数,左操作数可以是一个对象,也可以是一个原始值,这时比较的是它的包装对象。它的返回值是一个布尔值,可以用于解决对象识别问题
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值