关于typeof的困惑

时间:2010-10-11 07:03:15

标签: javascript operators typeof

typeof功能的用途是什么?

5 个答案:

答案 0 :(得分:15)

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

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

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

typeof expression

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

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

// Vs.

if (imUndeclared === undefined) { // ReferenceError!
}

可能会导致该语言新手混淆的一个案例是typeof运算符返回"object" null值,您应该牢记这一点......

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


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

答案 1 :(得分:6)

typeof运算符

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

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

用法

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

  • Undefined - &gt; “未定义”
  • Null - &gt; “对象”
  • Boolean - &gt; “布尔”
  • Number - &gt; “数量”
  • String - &gt; “的字符串”
  • Object - &gt;这取决于:
    • 原生且未实施Call - &gt; “对象”
    • 原生并且确实实施Call - &gt; “功能”
    • 主持人并且未实施Call - &gt;实现定义的除了可能不是 “未定义”“boolean”“number” “的字符串”

对于大多数实施,typeof也将返回:

  • Array - &gt; “对象”
  • Function - &gt; “object”(见上文Object的第2和第3个案例......)

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

注意事项

  • 如上所述,typeof的类型检测有损
  • ECMAScript 5起,
  • typeof仍然不支持Array(在大多数情况下,它被标识为“object”。(请参阅{{ 3}} Douglas Crockford
  • 检测FunctionArray各不相同。

其他参考资料

答案 2 :(得分:1)

typeof运算符返回一个表示操作数类型的字符串。

答案 3 :(得分:1)

有些人提出了很好的typeOf功能。我最近阅读并彻底测试的一个是来自Chris的博客here。我喜欢他的解决方案是它将始终适用于任何本机JavaScript对象。如果只提供对象,它会按预期告诉你它的类型:

alert(typeOf([1,2,3]));  // Array
alert(typeOf(123));  // Number
alert(typeOf(/a_reg_exp/gi));  // RegExp
alert(typeOf(null));  // null
alert(typeOf(undefined));  // undefined

如果第二个参数是可以标识类型的字符串,则对象类型和指定类型名称之间的相等性将作为布尔值返回:

alert(typeOf([1,2,3], "Array"));  // true
alert(typeOf(123, "String"));  // false
alert(typeOf(/a_reg_exp/gi, "RegExp"));  // true
alert(typeOf(null, "undefined"));  // false
alert(typeOf(undefined, "undefined"));  // true

答案 4 :(得分:0)

检查变量类型(无论是数组,对象,函数等)。

相关问题