【问题标题】:typeof for a string returning object字符串返回对象的 typeof
【发布时间】:2021-06-29 10:09:17
【问题描述】:

如屏幕截图所示,“this”是一个字符串,但条件检查失败。帮助我理解它背后的逻辑。提前致谢。

【问题讨论】:

  • console.log 打印什么?
  • console.log 打印对象
  • 是的,正如@Boldewyn 回答的那样。 this 是 typeof 对象。它不是原始字符串。要检查实例是否为对象,您可以执行 this instanceOf Object 它将返回 true 或 false。
  • "如屏幕截图所示,"this" 是一个字符串" 屏幕截图显示它是一个字符串 - 大写“S”。所以,它是一个对象,而不是原始字符串(小写“s”)。

标签: javascript node.js javascript-objects


【解决方案1】:

JavaScript 有一个特殊的特性。您可以在原始类型周围使用显式对象包装器。 Rauschmayer 博士在这篇文章中解释得很好:https://2ality.com/2011/03/javascript-values-not-everything-is.html

例子:

> typeof "abc"
'string'
> typeof new String("abc")
'object'

this 在您的上下文中将是这样一个包装对象。它的行为几乎与其原始对应物一样,但typeof 就是这样一种条件,它们不同。

【讨论】:

  • 值得补充的是,严格模式会使这种行为消失,你会得到解开的原语this。
  • 我试过(function() {"use strict"; console.log(typeof new String("abc"));})(),它仍然显示object。你有那个信息的来源吗?严格模式下的这种行为实际上会让我感到惊讶。
  • 我的意思是this 不会自动包装在严格模式下:'use strict'; (function() { console.log(this, typeof this); }).call('hello'); 输出hello, string 而没有严格模式你会得到[String 'hello'] object
  • 好点,是的。感谢您的澄清!
猜你喜欢
  • 2015-09-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2022-07-21
  • 1970-01-01
  • 1970-01-01
  • 2015-01-23
相关资源
最近更新 更多