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
- 特殊值
null
(typeof
也返回object
)
其他一切都是对象。这是设计。数组是对象,因此typeof
返回object
,就像其他不可呼应的对象一样(即函数)。请参阅typeof
的规格。
更好的问题是问为什么要测试某物是数组的。您可能不需要,尤其是因为诸如Nodelists之类的数组般的对象不是数组,而是在许多方面都像它们一样。
在大多数情况下,最好的解决方案是在提供的值上调用Array.from
:然后您知道它是一个数组。
在javascript中使用typeof操作员
'typeof'是一种运算符,用于返回变量类型的字符串描述。
示例
console.log(typeof 42);
output: "number"
console.log(typeof true);
output: "boolean"