JavaScript typeof运算符是否返回大写字符串?

时间:2012-01-20 11:32:43

标签: javascript

我最近遇到了以下代码:

var type = (typeof x).toLowerCase();

请注意,在上面的代码中,x只会是字符串,数字或未定义。我对此提出质疑,并指出specification (11.4.3)表示typeof运算符返回的值,并且所有值都已小写。

值得注意的是,规范让主机对象可以随意返回,所以在这种情况下, 可以获得带有大写字母的字符串(我不知道是否实际上曾经发生过,但它是允许的)。但是,如前所述,在这种情况下,x只是一个字符串,一个数字或未定义。

我的问题是,typeof运算符的任何实现是否都返回除小写字符串以外的任何内容?

3 个答案:

答案 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返回

  • “未知”为SafeArray
  • VarDate的“数据”

这两者都是由主机对象定义的非标准类型

旧IE也因各种其他主机对象返回“unknown”而闻名。