typeof
功能的用途是什么?
答案 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
的类型检测有损。typeof
仍然不支持Array
(在大多数情况下,它被标识为“object”。(请参阅{{ 3}} Douglas Crockford)Function
和Array
各不相同。typeof
。答案 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)
检查变量类型(无论是数组,对象,函数等)。