了解JavaScript中的操作员类型



i遇到下表,该表指示对象的内部[[Class]]属性及其相应的值,typeof运算符返回。

Value               Class      Type
-------------------------------------
"foo"               String     string
new String("foo")   String     object
1.2                 Number     number
new Number(1.2)     Number     object
true                Boolean    boolean
new Boolean(true)   Boolean    object
new Date()          Date       object
new Error()         Error      object
[1,2,3]             Array      object
new Array(1, 2, 3)  Array      object
new Function("")    Function   function
/abc/g              RegExp     object (function in Nitro/V8)
new RegExp("meow")  RegExp     object (function in Nitro/V8)
{}                  Object     object
new Object()        Object     object

这里要注意的一件事是typeof正确返回JavaScript中关联的原始数据类型。

但是,它返回从Array.prototype继承的数组的object类型,但返回了从Function.prototype继承的函数的function类型。

给定所有内容都是JavaScript中的一个对象(包括数组,函数&原始数据类型对象),我发现typeof操作员的这种行为非常不一致。

有人可以阐明typeof操作员在现实中的工作方式吗?

这有点奇怪,特质JavaScript行为。它是从JavaScript的最早时代继承的,今天可能不会以这种方式写。

尽管如此,我们还是JavaScript的地方,所以我们必须处理它!

问题是JavaScript中的值是对象,或者它们是原始的。这是一个设计决定。他们什么都不是。原始类型是:

  • 字符串
  • 数字
  • 布尔值
  • 符号(来自ES2015)
  • 特殊值undefined
  • 特殊值nulltypeof也返回object

其他一切都是对象。这是设计。数组是对象,因此typeof返回object,就像其他不可呼应的对象一样(即函数)。请参阅typeof的规格。

更好的问题是问为什么要测试某物是数组的。您可能不需要,尤其是因为诸如Nodelists之类的数组般的对象不是数组,而是在许多方面都像它们一样。

在大多数情况下,最好的解决方案是在提供的值上调用Array.from:然后您知道它是一个数组。

在javascript中使用typeof操作员

'typeof'是一种运算符,用于返回变量类型的字符串描述。

示例

console.log(typeof 42);
 output: "number"
console.log(typeof true);
 output: "boolean"

最新更新