我遇到了下表,其中列出了对象的内部[[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中关联的原始数据类型。
但是,它为从object
继承的数组返回Array.prototype
类型,但为从function
继承的函数返回Function.prototype
类型。
鉴于Javascript中的所有内容都是对象(包括数组,函数和原始数据类型对象),我发现typeof
运算符的这种行为非常不一致。
有人可以说明typeof
运算符在现实中的运作方式吗?
答案 0 :(得分:3)
这是一种奇怪的,特殊的Javascript行为。它是从Javascript的早期继承而来的,今天可能不会以这种方式编写。
尽管如此,我们使用的是Javascript,所以我们必须处理它!
问题是Javascript中的值是对象还是原始值。这是一个设计决定。他们不可能是别的什么。 The types of primitives are:
undefined
null
(typeof
也返回object
)任何事物和其他一切都是一个对象。这是设计的。数组是对象,因此typeof
返回object
,每个其他不可调用的对象(即函数)也返回println!("{:indent$}Indented text!", "", indent=indent);
。请参阅the spec for typeof
。
更好的问题是询问为什么你要测试某些东西是否是一个数组。您可能不需要,特别是像NodeLists这样的类似数组的对象不是数组,但在很多方面都像它们一样。
在大多数情况下,最好的解决方案是在提供的值上调用Array.from
:然后你知道它是一个数组。
答案 1 :(得分:0)
在Javascript中使用typeof运算符
'Typeof' is an operator which is used to return a string description of the type of a variable.
示例
console.log(typeof 42);
output: "number"
console.log(typeof true);
output: "boolean"