关于typeof的困惑

use*_*696 3 javascript typeof operators

这个typeof功能有什么用?

CMS*_*CMS 15

typeof实际上是一个运算符,而不是一个函数,它返回所提供的操作数的类型,并返回[1]一个字符串值,可以是:

  • "undefined"
  • "object"
  • "boolean"
  • "number"
  • "string"
  • "function"

看起来像一个函数,因为它可以应用于带括号的表达式,但是括号不是必需的,你可以在没有它们的情况下使用它:

typeof expression
Run Code Online (Sandbox Code Playgroud)

值得一提的是,你甚至可以引用一个未声明的标识符(一个不可解析的引用,例如一个永远不会声明的变量)并且它不会抛出一个ReferenceError,它只会产生"undefined",例如:

if (typeof imUndeclared == 'undefined') {
  // Ok...
}

// Vs.

if (imUndeclared === undefined) { // ReferenceError!
}
Run Code Online (Sandbox Code Playgroud)

一个可能导致语言新手混淆的一个案例是typeof操作员返回"object"一个null值,你应该牢记这一点......

此外,如果您想区分Array对象,RegExp对象,Date对象等,它不是太有用,但还有其他方法可以实现它.


[1]臭名昭着的JScript(IE):)例外,它实际上可以返回"unknown"!对于某些主机对象,例如typeof new ActiveXObject("Msxml2.XMLHTTP").abort; // "unknown"


hay*_*lem 6

typeof运营商

typeof是一个一元运算符(而不是函数),由ECMAScript标准定义,因此由大多数现有的JavaScript实现实现; 虽然从历史的角度来说,它是自1.1版本以来的JavaScript的一部分,之后它的所有权被移交给ECMA International.

它用于通过查询它(typeof expression)并检查返回值来内省变量的类型,返回值是一个string指示具有有损精度的类型的对象(见下文).

用法

根据ECMAScript 5标准(ECMA-262,第71页),当使用以下类型的给定参数进行测试时,它将返回以下字符串值:

  • Undefined- > "undefined"
  • Null- > "对象"
  • Boolean- > "布尔"
  • Number- > "数字"
  • String- > "字符串"
  • Object - >取决于:
    • 原生而且没有实现Call- > "对象"
    • 本机并确实实现Call- > "功能"
    • 主机并没有实现Call- >实现定义,但可能不是 "未定义","布尔","数字""字符串"

对于大多数实现,typeof还将返回:

  • Array- > "对象"
  • Function- > "对象"(见上面Object的第2和第3例......)

(请注意,类型是大写的,而他们的字符串标识符通过返回的typeof不是)

注意事项

其他参考文献