我最近遇到了以下代码:
var type = (typeof x).toLowerCase();
请注意,在上面的代码中,x
只会是字符串,数字或未定义。我对此提出质疑,并指出specification (11.4.3)表示typeof
运算符返回的值,并且所有值都已小写。
值得注意的是,规范让主机对象可以随意返回,所以在这种情况下, 可以获得带有大写字母的字符串(我不知道是否实际上曾经发生过,但它是允许的)。但是,如前所述,在这种情况下,x
只是一个字符串,一个数字或未定义。
我的问题是,typeof
运算符的任何实现是否都返回除小写字符串以外的任何内容?
答案 0 :(得分:1)
Spidermonkey似乎只返回这些:
"undefined"
"object"
"function"
"string"
"number"
"boolean"
NULL
https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JS_GetTypeName
与V8相同:
default:
// For any kind of object not handled above, the spec rule for
// host objects gives that it is okay to return "object"
return isolate->heap()->object_symbol();
http://code.google.com/p/v8/source/browse/branches/bleeding_edge/src/runtime.cc#5245
不知道MS,我猜他们也不使用自定义类型,但你永远不会知道它们。
typeof返回有六个可能的值:“number”,“string”,“boolean”,“object”,“function”和“undefined”。
http://msdn.microsoft.com/en-us/library/windows/apps/259s7zc1%28v=vs.94%29.aspx
答案 1 :(得分:0)
返回typeof运算符的值
未定义:“未定义”
空:“对象”
布尔值:“boolean”
编号:“数字”
字符串:“string”
对象(本机且不实现调用):“对象”
对象(本机和实现调用):“功能”
对象(主机):依赖于实现
是的,除了最后一个。 Source
答案 2 :(得分:0)
根据extensions to typeof operator
IE9返回
这两者都是由主机对象定义的非标准类型
旧IE也因各种其他主机对象返回“unknown”而闻名。